diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2018-02-22 21:17:14 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2018-02-22 21:17:14 (GMT) |
| commit | 07448025782175253319b1330ea0a1ab3cb0b5d0 (patch) | |
| tree | a65b45bbea287fe45c91962dfd9e855ef5037f50 /generic/tclScan.c | |
| parent | cb2f9cccfbc8007a93a1010bbabe4614939b94a2 (diff) | |
| parent | f5bf130f05e3dcf636ef831f017d5672c594660a (diff) | |
| download | tcl-07448025782175253319b1330ea0a1ab3cb0b5d0.zip tcl-07448025782175253319b1330ea0a1ab3cb0b5d0.tar.gz tcl-07448025782175253319b1330ea0a1ab3cb0b5d0.tar.bz2 | |
merge trunk
Diffstat (limited to 'generic/tclScan.c')
| -rw-r--r-- | generic/tclScan.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/generic/tclScan.c b/generic/tclScan.c index 0cd23d8..65ceb66 100644 --- a/generic/tclScan.c +++ b/generic/tclScan.c @@ -10,6 +10,7 @@ */ #include "tclInt.h" +#include "tommath.h" /* * Flag values used by Tcl_ScanObjCmd. @@ -415,14 +416,7 @@ ValidateFormat( case 'x': case 'X': case 'b': - break; case 'u': - if (flags & SCAN_BIG) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "unsigned bignum scans are invalid", -1)); - Tcl_SetErrorCode(interp, "TCL", "FORMAT", "BADUNSIGNED",NULL); - goto error; - } break; /* * Bracket terms need special checking @@ -944,7 +938,18 @@ Tcl_ScanObjCmd( } else { TclSetIntObj(objPtr, wideValue); } - } else if (!(flags & SCAN_BIG)) { + } else if (flags & SCAN_BIG) { + if (flags & SCAN_UNSIGNED) { + mp_int big; + if ((Tcl_GetBignumFromObj(interp, objPtr, &big) != TCL_OK) + || (mp_cmp_d(&big, 0) == MP_LT)) { + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "unsigned bignum scans are invalid", -1)); + Tcl_SetErrorCode(interp, "TCL", "FORMAT", "BADUNSIGNED",NULL); + return TCL_ERROR; + } + } + } else { if (TclGetLongFromObj(NULL, objPtr, &value) != TCL_OK) { if (TclGetString(objPtr)[0] == '-') { value = LONG_MIN; |
