summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2016-10-12 13:47:32 (GMT)
committerdgp <dgp@users.sourceforge.net>2016-10-12 13:47:32 (GMT)
commit6293f8f90ba51c630d5e941443b9ca582ba23357 (patch)
treeb07a46ac5e1a5a18134a42d9ef1724d2438d4e4f
parentb0e42562f6b8d5deea92df128bc40bf71e6bc57f (diff)
parent915c9e49675d816fa2018e7b3b35903264bfffb4 (diff)
downloadtcl-6293f8f90ba51c630d5e941443b9ca582ba23357.zip
tcl-6293f8f90ba51c630d5e941443b9ca582ba23357.tar.gz
tcl-6293f8f90ba51c630d5e941443b9ca582ba23357.tar.bz2
merge TclParseNumber fixes
-rw-r--r--generic/tclStrToD.c9
-rw-r--r--tests/scan.test6
2 files changed, 15 insertions, 0 deletions
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index f69f6b9..6da6df3 100644
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -396,6 +396,9 @@ static Tcl_WideUInt Nokia770Twiddle(Tcl_WideUInt w);
* - TCL_PARSE_SCAN_PREFIXES: ignore the prefixes 0b and 0o that are
* not part of the [scan] command's vocabulary. Use only in
* combination with TCL_PARSE_INTEGER_ONLY.
+ * - TCL_PARSE_BINARY_ONLY: parse only in the binary format, whether
+ * or not a prefix is present that would lead to binary parsing.
+ * Use only in combination with TCL_PARSE_INTEGER_ONLY.
* - TCL_PARSE_OCTAL_ONLY: parse only in the octal format, whether
* or not a prefix is present that would lead to octal parsing.
* Use only in combination with TCL_PARSE_INTEGER_ONLY.
@@ -627,6 +630,9 @@ TclParseNumber(
acceptPoint = p;
acceptLen = len;
if (c == 'x' || c == 'X') {
+ if (flags & (TCL_PARSE_OCTAL_ONLY|TCL_PARSE_BINARY_ONLY)) {
+ goto endgame;
+ }
state = ZERO_X;
break;
}
@@ -637,6 +643,9 @@ TclParseNumber(
goto zeroo;
}
if (c == 'b' || c == 'B') {
+ if (flags & TCL_PARSE_OCTAL_ONLY) {
+ goto endgame;
+ }
state = ZERO_B;
break;
}
diff --git a/tests/scan.test b/tests/scan.test
index b57b641..7540c9c 100644
--- a/tests/scan.test
+++ b/tests/scan.test
@@ -535,6 +535,12 @@ test scan-5.13 {integer scanning and overflow} {
test scan-5.14 {integer scanning} {
scan 0xff %u
} 0
+test scan-5.15 {Bug be003d570f} {
+ scan 0x40 %o
+} 0
+test scan-5.16 {Bug be003d570f} {
+ scan 0x40 %b
+} 0
test scan-6.1 {floating-point scanning} -setup {
set a {}; set b {}; set c {}; set d {}