diff options
author | dgp <dgp@users.sourceforge.net> | 2005-03-18 15:31:13 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2005-03-18 15:31:13 (GMT) |
commit | f7bd42abc0c6952dae468911161f6dd0dc01f913 (patch) | |
tree | c939df560d73e042488f2be4b434974d998cfc54 /generic | |
parent | 7a9aec907c0a66332f6c2f5407644103789ffca7 (diff) | |
download | tcl-f7bd42abc0c6952dae468911161f6dd0dc01f913.zip tcl-f7bd42abc0c6952dae468911161f6dd0dc01f913.tar.gz tcl-f7bd42abc0c6952dae468911161f6dd0dc01f913.tar.bz2 |
* generic/tclCompCmds.c (TclCompileIncrCmd): Corrected checks
for immediate operand usage to permit leading space and sign
characters. [Bug 1165671]
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclCompCmds.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/generic/tclCompCmds.c b/generic/tclCompCmds.c index ae934bd..a1be28d 100644 --- a/generic/tclCompCmds.c +++ b/generic/tclCompCmds.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCompCmds.c,v 1.60 2005/03/10 22:15:34 msofer Exp $ + * RCS: @(#) $Id: tclCompCmds.c,v 1.61 2005/03/18 15:31:44 dgp Exp $ */ #include "tclInt.h" @@ -1365,31 +1365,28 @@ TclCompileIncrCmd(interp, parsePtr, envPtr) */ haveImmValue = 0; - immValue = 0; + immValue = 1; if (parsePtr->numWords == 3) { incrTokenPtr = varTokenPtr + (varTokenPtr->numComponents + 1); if (incrTokenPtr->type == TCL_TOKEN_SIMPLE_WORD) { CONST char *word = incrTokenPtr[1].start; int numBytes = incrTokenPtr[1].size; - int validLength = TclParseInteger(word, numBytes); - long n; /* * Note there is a danger that modifying the string could have - * undesirable side effects. In this case, TclLooksLikeInt and - * TclGetLong do not have any dependencies on shared strings so we - * should be safe. + * undesirable side effects. In this case, TclLooksLikeInt has + * no dependencies on shared strings so we should be safe. */ - if (validLength == numBytes) { + if (TclLooksLikeInt(word, numBytes)) { int code; - Tcl_Obj *longObj = Tcl_NewStringObj(word, numBytes); - Tcl_IncrRefCount(longObj); - code = Tcl_GetLongFromObj(NULL, longObj, &n); - Tcl_DecrRefCount(longObj); - if ((code == TCL_OK) && (-127 <= n) && (n <= 127)) { + Tcl_Obj *intObj = Tcl_NewStringObj(word, numBytes); + Tcl_IncrRefCount(intObj); + code = Tcl_GetIntFromObj(NULL, intObj, &immValue); + Tcl_DecrRefCount(intObj); + if ((code == TCL_OK) + && (-127 <= immValue) && (immValue <= 127)) { haveImmValue = 1; - immValue = n; } } if (!haveImmValue) { @@ -1402,7 +1399,6 @@ TclCompileIncrCmd(interp, parsePtr, envPtr) } } else { /* no incr amount given so use 1 */ haveImmValue = 1; - immValue = 1; } /* |