summaryrefslogtreecommitdiffstats
path: root/generic/tclEncoding.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2014-12-23 17:46:05 (GMT)
committerdgp <dgp@users.sourceforge.net>2014-12-23 17:46:05 (GMT)
commitb6fecacc22a9ba5f13cbab794af7dcc46ebc5bc3 (patch)
tree2570101eb6a2366cc9fefc11344864e22f6b131f /generic/tclEncoding.c
parent360b5c41eed8a2bc3d2b80f23ca1cdd98fe6e56f (diff)
downloadtcl-b6fecacc22a9ba5f13cbab794af7dcc46ebc5bc3.zip
tcl-b6fecacc22a9ba5f13cbab794af7dcc46ebc5bc3.tar.gz
tcl-b6fecacc22a9ba5f13cbab794af7dcc46ebc5bc3.tar.bz2
Support TCL_ENCODING_CHAR_LIMIT in the UnicodeToUtfProc driver.
Diffstat (limited to 'generic/tclEncoding.c')
-rw-r--r--generic/tclEncoding.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index f92cabb..0fe224e 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2408,9 +2408,12 @@ UnicodeToUtfProc(
{
const char *srcStart, *srcEnd;
const char *dstEnd, *dstStart;
- int result, numChars;
+ int result, numChars, charLimit = INT_MAX;
Tcl_UniChar ch;
+ if (flags & TCL_ENCODING_CHAR_LIMIT) {
+ charLimit = *dstCharsPtr;
+ }
result = TCL_OK;
if ((srcLen % sizeof(Tcl_UniChar)) != 0) {
result = TCL_CONVERT_MULTIBYTE;
@@ -2424,7 +2427,7 @@ UnicodeToUtfProc(
dstStart = dst;
dstEnd = dst + dstLen - TCL_UTF_MAX;
- for (numChars = 0; src < srcEnd; numChars++) {
+ for (numChars = 0; src < srcEnd && numChars <= charLimit; numChars++) {
if (dst > dstEnd) {
result = TCL_CONVERT_NOSPACE;
break;