From 0ebb8899a331886beaa24f4ff1ab19b68fd590d9 Mon Sep 17 00:00:00 2001 From: dgp Date: Wed, 11 Dec 2002 20:30:11 +0000 Subject: * generic/tclParseExpr.c (TclParseInteger): Return 1 for the string "0x" (recognize leading "0" as an integer). [Bug 648441]. * tests/parseExpr.test (parseExpr-19.1): Test for Bug 648441. --- ChangeLog | 6 ++++++ generic/tclParseExpr.c | 6 ++++-- tests/parseExpr.test | 9 ++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 08cb8ec..ee98999 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2002-12-11 Don Porter + + * generic/tclParseExpr.c (TclParseInteger): Return 1 for the + string "0x" (recognize leading "0" as an integer). [Bug 648441]. + * tests/parseExpr.test (parseExpr-19.1): Test for Bug 648441. + 2002-12-09 Jeff Hobbs * win/tclWinThrd.c (TclpMasterUnlock): diff --git a/generic/tclParseExpr.c b/generic/tclParseExpr.c index 077dddb..85be0cd 100644 --- a/generic/tclParseExpr.c +++ b/generic/tclParseExpr.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclParseExpr.c,v 1.15 2002/08/05 03:24:41 dgp Exp $ + * RCS: @(#) $Id: tclParseExpr.c,v 1.16 2002/12/11 20:30:16 dgp Exp $ */ #include "tclInt.h" @@ -1918,7 +1918,9 @@ TclParseInteger(string, numBytes) if (scanned) { return scanned + 2; } - return 0; + + /* Recognize the 0 as valid integer, but x is left behind */ + return 1; } while (numBytes && isdigit(UCHAR(*p))) { /* INTL: digit */ numBytes--; p++; diff --git a/tests/parseExpr.test b/tests/parseExpr.test index 489e6d2..ad5bd17 100644 --- a/tests/parseExpr.test +++ b/tests/parseExpr.test @@ -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: parseExpr.test,v 1.8 2002/08/05 03:24:41 dgp Exp $ +# RCS: @(#) $Id: parseExpr.test,v 1.9 2002/12/11 20:30:16 dgp Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { package require tcltest @@ -637,6 +637,13 @@ test parseExpr-18.1 {LogSyntaxError procedure, error in expr longer than 60 char list [catch {testexprparser {(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)/} -1} msg] $msg } {1 {syntax error in expression "(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+0123456)*(+012...": premature end of expression}} +test parseExpr-19.1 {TclParseInteger: [Bug 648441]} { + # Should see this as integer "0" followed by incomplete function "x" + # Thus, syntax error. + # If Bug 648441 is not fixed, "0x" will be seen as floating point 0.0 + list [catch {expr 0x} result] $result +} [list 1 {syntax error in expression "0x": extra tokens at end of expression}] + # cleanup ::tcltest::cleanupTests return -- cgit v0.12