diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-01-24 14:56:10 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-01-24 14:56:10 (GMT) |
commit | 9df34dd7c3b9ed251e319e644d916a7c0898230e (patch) | |
tree | f90b6033f77820bd87ea88fdf29ae43ef4022bf1 /generic | |
parent | 95f644550660d554a898a5034562036f7306e9ce (diff) | |
parent | 5025e386f4e080f615186dee9b4ef82d61eea79f (diff) | |
download | tcl-9df34dd7c3b9ed251e319e644d916a7c0898230e.zip tcl-9df34dd7c3b9ed251e319e644d916a7c0898230e.tar.gz tcl-9df34dd7c3b9ed251e319e644d916a7c0898230e.tar.bz2 |
merge core-8-5-branchbug_3601260
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tcl.h | 2 | ||||
-rw-r--r-- | generic/tclIndexObj.c | 14 | ||||
-rw-r--r-- | generic/tclPort.h | 5 |
3 files changed, 12 insertions, 9 deletions
diff --git a/generic/tcl.h b/generic/tcl.h index 33730d4..5fde9dc 100644 --- a/generic/tcl.h +++ b/generic/tcl.h @@ -436,7 +436,7 @@ typedef unsigned TCL_WIDE_INT_TYPE Tcl_WideUInt; struct {long tv_sec;} st_ctim; /* Here is a 4-byte gap */ } Tcl_StatBuf; -#elif defined(HAVE_STRUCT_STAT64) +#elif defined(HAVE_STRUCT_STAT64) && !defined(__APPLE__) typedef struct stat64 Tcl_StatBuf; #else typedef struct stat Tcl_StatBuf; diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c index 944fb8e..8ec1b68 100644 --- a/generic/tclIndexObj.c +++ b/generic/tclIndexObj.c @@ -53,12 +53,12 @@ typedef struct { * The following macros greatly simplify moving through a table... */ -#define STRING_AT(table, offset, index) \ - (*((const char *const *)(((char *)(table)) + ((offset) * (index))))) +#define STRING_AT(table, offset) \ + (*((const char *const *)(((char *)(table)) + (offset)))) #define NEXT_ENTRY(table, offset) \ - (&(STRING_AT(table, offset, 1))) + (&(STRING_AT(table, offset))) #define EXPAND_OF(indexRep) \ - STRING_AT((indexRep)->tablePtr, (indexRep)->offset, (indexRep)->index) + STRING_AT((indexRep)->tablePtr, (indexRep)->offset*(indexRep)->index) /* *---------------------------------------------------------------------- @@ -138,7 +138,7 @@ Tcl_GetIndexFromObj( * proper match, then TCL_ERROR is returned and an error message is left * in interp's result (unless interp is NULL). The msg argument is used * in the error message; for example, if msg has the value "option" then - * the error message will say something flag 'bad option "foo": must be + * the error message will say something like 'bad option "foo": must be * ...' * * Side effects: @@ -170,6 +170,10 @@ Tcl_GetIndexFromObjStruct( Tcl_Obj *resultPtr; IndexRep *indexRep; + /* Protect against invalid values, like -1 or 0. */ + if (offset < (int)sizeof(char *)) { + offset = (int)sizeof(char *); + } /* * See if there is a valid cached result from a previous lookup. */ diff --git a/generic/tclPort.h b/generic/tclPort.h index 7021b8d..12a60db 100644 --- a/generic/tclPort.h +++ b/generic/tclPort.h @@ -19,11 +19,10 @@ #endif #if defined(_WIN32) # include "tclWinPort.h" -#endif -#include "tcl.h" -#if !defined(_WIN32) +#else # include "tclUnixPort.h" #endif +#include "tcl.h" #if !defined(LLONG_MIN) # ifdef TCL_WIDE_INT_IS_LONG |