From 1ce78346fbd0daa8d65e02d2d1f59c74fc02f95d Mon Sep 17 00:00:00 2001 From: sebres Date: Wed, 12 Dec 2018 17:00:59 +0000 Subject: better fix for [3e0a2d99f3], considering [string first] could return a value larger that INT_MAX for x64 --- generic/tclCmdMZ.c | 2 +- generic/tclDecls.h | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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)) -- cgit v0.12