diff options
author | ferrieux <ferrieux@users.sourceforge.net> | 2017-02-25 22:42:47 (GMT) |
---|---|---|
committer | ferrieux <ferrieux@users.sourceforge.net> | 2017-02-25 22:42:47 (GMT) |
commit | 926696ccf982e1136d462237594ed5fd67f8f02f (patch) | |
tree | d58770b34002a042d8394508870c6669c1eb2fca /generic/tclParse.c | |
parent | c08913902e0e02aac4ea1e1377fa40d0d43ddf63 (diff) | |
download | tcl-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.c | 5 |
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); /* |