summaryrefslogtreecommitdiffstats
path: root/generic/tclScan.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-06-19 10:32:39 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-06-19 10:32:39 (GMT)
commitc7e60575dde5c9b7ca92fb83bbf61319b17e506c (patch)
tree5e90c99c08a69c6b4b862eaa3b455014b4183147 /generic/tclScan.c
parentba8a9c512f733da5f0db3055c0a24590c542b9ea (diff)
parent96dd069f9fc0b4e987db3a0ee7dde49edd93d3af (diff)
downloadtcl-c7e60575dde5c9b7ca92fb83bbf61319b17e506c.zip
tcl-c7e60575dde5c9b7ca92fb83bbf61319b17e506c.tar.gz
tcl-c7e60575dde5c9b7ca92fb83bbf61319b17e506c.tar.bz2
TIP #697: 32-bit truncation in format and scan (let's gain some time)
Diffstat (limited to 'generic/tclScan.c')
-rw-r--r--generic/tclScan.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/generic/tclScan.c b/generic/tclScan.c
index c143efa..48d2bcc 100644
--- a/generic/tclScan.c
+++ b/generic/tclScan.c
@@ -385,6 +385,10 @@ ValidateFormat(
}
format += TclUtfToUniChar(format, &ch);
break;
+ case 'L':
+ flags |= SCAN_BIG;
+ format += TclUtfToUniChar(format, &ch);
+ break;
case 'l':
if (*format == 'l') {
flags |= SCAN_BIG;
@@ -393,7 +397,6 @@ ValidateFormat(
break;
}
/* FALLTHRU */
- case 'L':
case 'j':
case 'q':
flags |= SCAN_LONGER;
@@ -601,7 +604,7 @@ Tcl_ScanObjCmd(
const char *format;
int numVars, nconversions, totalVars = -1;
int objIndex, offset, i, result, code;
- long value;
+ int value;
const char *string, *end, *baseString;
char op = 0;
int underflow = 0;
@@ -994,11 +997,11 @@ Tcl_ScanObjCmd(
}
}
} else {
- if (TclGetLongFromObj(NULL, objPtr, &value) != TCL_OK) {
+ if (TclGetIntFromObj(NULL, objPtr, &value) != TCL_OK) {
if (TclGetString(objPtr)[0] == '-') {
- value = LONG_MIN;
+ value = INT_MIN;
} else {
- value = LONG_MAX;
+ value = INT_MAX;
}
}
if ((flags & SCAN_UNSIGNED) && (value < 0)) {