summaryrefslogtreecommitdiffstats
path: root/generic/tclParse.c
diff options
context:
space:
mode:
authorferrieux <ferrieux@users.sourceforge.net>2017-02-25 22:42:47 (GMT)
committerferrieux <ferrieux@users.sourceforge.net>2017-02-25 22:42:47 (GMT)
commit926696ccf982e1136d462237594ed5fd67f8f02f (patch)
treed58770b34002a042d8394508870c6669c1eb2fca /generic/tclParse.c
parentc08913902e0e02aac4ea1e1377fa40d0d43ddf63 (diff)
downloadtcl-926696ccf982e1136d462237594ed5fd67f8f02f.zip
tcl-926696ccf982e1136d462237594ed5fd67f8f02f.tar.gz
tcl-926696ccf982e1136d462237594ed5fd67f8f02f.tar.bz2
Fix a 2002 bug detected by Brian Griffin : in the presence of [], ParseTokens overshoots the passed character range and trusts parsePtr->end instead.
Diffstat (limited to 'generic/tclParse.c')
-rw-r--r--generic/tclParse.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/generic/tclParse.c b/generic/tclParse.c
index 71f51b6..2cc9c6b 100644
--- a/generic/tclParse.c
+++ b/generic/tclParse.c
@@ -1169,6 +1169,8 @@ ParseTokens(
numBytes--;
nestedPtr = TclStackAlloc(parsePtr->interp, sizeof(Tcl_Parse));
while (1) {
+ const char *curEnd;
+
if (Tcl_ParseCommand(parsePtr->interp, src, numBytes, 1,
nestedPtr) != TCL_OK) {
parsePtr->errorType = nestedPtr->errorType;
@@ -1177,8 +1179,9 @@ ParseTokens(
TclStackFree(parsePtr->interp, nestedPtr);
return TCL_ERROR;
}
+ curEnd = src + numBytes;
src = nestedPtr->commandStart + nestedPtr->commandSize;
- numBytes = parsePtr->end - src;
+ numBytes = curEnd - src;
Tcl_FreeParse(nestedPtr);
/*