diff options
author | andreas_kupries <akupries@shaw.ca> | 2006-04-05 00:18:50 (GMT) |
---|---|---|
committer | andreas_kupries <akupries@shaw.ca> | 2006-04-05 00:18:50 (GMT) |
commit | fe962ea619c8e9cb329c52ab4fe078dd32a6d55c (patch) | |
tree | f4b3e7ce544c0a47b189386d7ecb29163d4856ff /generic/tclEncoding.c | |
parent | b9b45920ad059f50f37c6d076457fe17e6225e57 (diff) | |
download | tcl-fe962ea619c8e9cb329c52ab4fe078dd32a6d55c.zip tcl-fe962ea619c8e9cb329c52ab4fe078dd32a6d55c.tar.gz tcl-fe962ea619c8e9cb329c52ab4fe078dd32a6d55c.tar.bz2 |
* generic/tclIO.c (ReadChars): Added check and panic and
commentary to a piece of code which relies on BUFFER_PADDING to
create enough space at the beginning of each buffer forthe
insertion of partial multi-byte data at the beginning of a
buffer. To explain why this code is ok, and as precaution if
someone twiddled the BUFFER_PADDING into uselessness.
* generic/tclIO.c (ReadChars): [SF Tcl Bug 1462248]. Added code
temporarily suppress the use of TCL_ENCODING_END set when eof
was reached while the buffer we are converting is not truly the
last buffer in the queue. together with the Utf bug below it was
possible to completely bollox the buffer data structures,
eventually crashing Tcl.
* generic/tclEncoding.c (UtfToUtfProc): Fixed problem where the
function accessed memory beyond the end of the input
buffer. When TCL_ENCODING_END is set and the last bytes of the
buffer start a multi-byte sequence. This bug contributed to [SF
Tcl Bug 1462248].
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r-- | generic/tclEncoding.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c index 783e3d3..7abb402 100644 --- a/generic/tclEncoding.c +++ b/generic/tclEncoding.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclEncoding.c,v 1.41 2006/03/24 21:11:45 dgp Exp $ + * RCS: @(#) $Id: tclEncoding.c,v 1.42 2006/04/05 00:18:50 andreas_kupries Exp $ */ #include "tclInt.h" @@ -2225,6 +2225,16 @@ UtfToUtfProc( *dst++ = 0; src += 2; + } else if (!Tcl_UtfCharComplete(src, srcEnd - src)) { + /* Always check before using Tcl_UtfToUniChar. Not doing + * can so cause it run beyond the endof the buffer! If we + * * happen such an incomplete char its byts are made to * + * represent themselves. + */ + + ch = (Tcl_UniChar) *src; + src += 1; + dst += Tcl_UniCharToUtf(ch, dst); } else { src += Tcl_UtfToUniChar(src, &ch); dst += Tcl_UniCharToUtf(ch, dst); |