From c639e72c38ffbe038a79a58991d4c5bb3e027a6f Mon Sep 17 00:00:00 2001 From: dgp Date: Thu, 1 Sep 2011 17:13:59 +0000 Subject: 3402540 Corrections to TclParseNumber() to make it reject invalid Nan(Hex) [scan Inf %g] is portable; remove constraint. --- ChangeLog | 7 +++++++ generic/tclStrToD.c | 3 +++ tests/binary.test | 18 ++++++++++++++++++ tests/scan.test | 4 ++-- 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9bec595..cb877b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-09-01 Don Porter + + * generic/tclStrToD.c: [Bug 3402540] Corrections to TclParseNumber() + * tests/binary.test: to make it reject invalid Nan(Hex) strings. + + * tests/scan.test: [scan Inf %g] is portable; remove constraint. + 2011-08-30 Donal K. Fellows * generic/tclInterp.c (SlaveCommandLimitCmd, SlaveTimeLimitCmd): diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c index aa78c51..c942023 100755 --- a/generic/tclStrToD.c +++ b/generic/tclStrToD.c @@ -1060,7 +1060,10 @@ TclParseNumber( d = 10 + c - 'a'; } else if (c >= 'A' && c <= 'F') { d = 10 + c - 'A'; + } else { + goto endgame; } + numSigDigs++; significandWide = (significandWide << 4) + d; state = sNANHEX; break; diff --git a/tests/binary.test b/tests/binary.test index 44af9e5..e43b9f4 100644 --- a/tests/binary.test +++ b/tests/binary.test @@ -2356,6 +2356,24 @@ test binary-63.4 {NaN} ieeeFloatingPoint { binary scan [binary format q {NaN( 3123456789aBc)}] w w format 0x%016lx [expr {$w & 0xfff3ffffffffffff}] } 0x7ff3123456789abc + +# Make sure TclParseNumber() rejects invalid nan-hex formats [Bug 3402540] +test binary-63.5 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan( +} -returnCodes error -match glob -result {expected floating-point number*} +test binary-63.6 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan() +} -returnCodes error -match glob -result {expected floating-point number*} +test binary-63.7 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan(g) +} -returnCodes error -match glob -result {expected floating-point number*} +test binary-63.8 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan(1,2) +} -returnCodes error -match glob -result {expected floating-point number*} +test binary-63.9 {NaN} -constraints ieeeFloatingPoint -body { + binary format q Nan(1234567890abcd) +} -returnCodes error -match glob -result {expected floating-point number*} + test binary-64.1 {NaN} \ -constraints ieeeFloatingPoint \ -body { diff --git a/tests/scan.test b/tests/scan.test index b37ce0c..34351e0 100644 --- a/tests/scan.test +++ b/tests/scan.test @@ -749,11 +749,11 @@ testConstraint ieeeFloatingPoint [testIEEE] # scan infinities - not working -test scan-14.1 {infinity} ieeeFloatingPoint { +test scan-14.1 {infinity} { scan Inf %g d set d } Inf -test scan-14.2 {infinity} ieeeFloatingPoint { +test scan-14.2 {infinity} { scan -Inf %g d set d } -Inf -- cgit v0.12