diff options
| author | sebres <sebres@users.sourceforge.net> | 2018-12-12 17:00:59 (GMT) |
|---|---|---|
| committer | sebres <sebres@users.sourceforge.net> | 2018-12-12 17:00:59 (GMT) |
| commit | 1ce78346fbd0daa8d65e02d2d1f59c74fc02f95d (patch) | |
| tree | 664d6c4757c86f9b33466ab6b6719237f6972f5c | |
| parent | c60e1a679dc096b076279e0ef80a82fe41223a51 (diff) | |
| download | tcl-1ce78346fbd0daa8d65e02d2d1f59c74fc02f95d.zip tcl-1ce78346fbd0daa8d65e02d2d1f59c74fc02f95d.tar.gz tcl-1ce78346fbd0daa8d65e02d2d1f59c74fc02f95d.tar.bz2 | |
better fix for [3e0a2d99f3], considering [string first] could return a value larger that INT_MAX for x64
| -rw-r--r-- | generic/tclCmdMZ.c | 2 | ||||
| -rw-r--r-- | generic/tclDecls.h | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c index 1654e5a..216fa0e 100644 --- a/generic/tclCmdMZ.c +++ b/generic/tclCmdMZ.c @@ -1338,7 +1338,7 @@ StringFirstCmd( return TCL_ERROR; } } - Tcl_SetObjResult(interp, Tcl_NewIntObj(TclStringFirst(objv[1], + Tcl_SetObjResult(interp, Tcl_NewWideIntObjFromSize(TclStringFirst(objv[1], objv[2], start))); return TCL_OK; } diff --git a/generic/tclDecls.h b/generic/tclDecls.h index 57e467b..17da622 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -3841,6 +3841,13 @@ extern const TclStubs *tclStubsPtr; #define Tcl_NewLongObj(value) Tcl_NewWideIntObj((long)(value)) #define Tcl_NewIntObj(value) Tcl_NewWideIntObj((int)(value)) +#if (!defined(TCL_WIDE_INT_IS_LONG) || (LONG_MAX > UINT_MAX)) && (SIZE_MAX <= UINT_MAX) + static inline Tcl_Obj * Tcl_NewWideIntObjFromSize(size_t value) { + return Tcl_NewWideIntObj(value != ((size_t)-1) ? (Tcl_WideInt)value : -1); + } +#else +# define Tcl_NewWideIntObjFromSize Tcl_NewWideIntObj +#endif #define Tcl_DbNewLongObj(value, file, line) Tcl_DbNewWideIntObj((long)(value), file, line) #define Tcl_SetIntObj(objPtr, value) Tcl_SetWideIntObj((objPtr), (int)(value)) #define Tcl_SetLongObj(objPtr, value) Tcl_SetWideIntObj((objPtr), (long)(value)) |
