diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-01-24 08:22:40 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-01-24 08:22:40 (GMT) |
commit | eae252da83b4af0e55e40abefe4e3d7ff8f1a370 (patch) | |
tree | f167175d46e953c19ec6843d6a7dd00128150c7d | |
parent | 5c9b640714bee1ace568923c48755f7b04d9fd9c (diff) | |
parent | 5025e386f4e080f615186dee9b4ef82d61eea79f (diff) | |
download | tcl-eae252da83b4af0e55e40abefe4e3d7ff8f1a370.zip tcl-eae252da83b4af0e55e40abefe4e3d7ff8f1a370.tar.gz tcl-eae252da83b4af0e55e40abefe4e3d7ff8f1a370.tar.bz2 |
Simplify STRING_AT macro.
Protect Tcl_GetIndexFromObjStruct from invalid "offset" values, like 0 or -1. Undocumented, because I don't want to promote people start using that.
-rw-r--r-- | generic/tclIndexObj.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c index 512f5ba..0372668 100644 --- a/generic/tclIndexObj.c +++ b/generic/tclIndexObj.c @@ -69,12 +69,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) /* *---------------------------------------------------------------------- @@ -238,7 +238,7 @@ GetIndexFromObjList( * a 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 + * then the error message will say something like 'bad option "foo": must * be ...' * * Side effects: @@ -270,6 +270,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. */ |