Index: README.release =================================================================== diff -u -r1a70aea890b7fedd919c0c4d04904df5e030043e -r438ba04d25782cf13000d55ab51bf9241503e179 --- README.release (.../README.release) (revision 1a70aea890b7fedd919c0c4d04904df5e030043e) +++ README.release (.../README.release) (revision 438ba04d25782cf13000d55ab51bf9241503e179) @@ -19,9 +19,9 @@ make "CC=clang" test * run static analysis: make cppcheck - #/opt/local/bin/scan-build-mp-3.8 -enable-checker alpha make - /opt/local/bin/scan-build-mp-3.8 make - /opt/local/bin/scan-view-mp-3.8 ... + #/opt/local/bin/scan-build-mp-3.9 -enable-checker alpha make + /opt/local/bin/scan-build-mp-3.9 make + /opt/local/bin/scan-view-mp-3.9 ... * run Coverity (7.6.0, requires gcc 4.8): (sudo port install gcc48) (download Coverity Build Tool from https://scan.coverity.com/download/) Index: generic/nsf.c =================================================================== diff -u -r052006de60c2348d7edf887bec3369c9f12f7d40 -r438ba04d25782cf13000d55ab51bf9241503e179 --- generic/nsf.c (.../nsf.c) (revision 052006de60c2348d7edf887bec3369c9f12f7d40) +++ generic/nsf.c (.../nsf.c) (revision 438ba04d25782cf13000d55ab51bf9241503e179) @@ -4326,22 +4326,27 @@ static Tcl_Var CompiledLocalsLookup(CallFrame *varFramePtr, const char *varName) { - int i, localCt; - Tcl_Obj **objPtrPtr; + int i, localCt, nameLength; + Tcl_Obj **varNameObjPtr; nonnull_assert(varFramePtr != NULL); nonnull_assert(varName != NULL); localCt = varFramePtr->numCompiledLocals; - objPtrPtr = &varFramePtr->localCachePtr->varName0; + varNameObjPtr = &varFramePtr->localCachePtr->varName0; + nameLength = strlen(varName); /* fprintf(stderr, ".. search #local vars %d for %s\n", localCt, varName);*/ - for (i = 0 ; i < localCt ; i++, objPtrPtr++) { - Tcl_Obj *objPtr = *objPtrPtr; - if (likely(objPtr != NULL)) { - const char *localName = TclGetString(objPtr); + for (i = 0 ; i < localCt ; i++, varNameObjPtr++) { + Tcl_Obj *varNameObj = *varNameObjPtr; + int len; + + if (likely(varNameObj != NULL)) { + const char *localName = TclGetStringFromObj(varNameObj, &len); + if (unlikely(varName[0] == localName[0] && varName[1] == localName[1] + && len == nameLength && strcmp(varName, localName) == 0)) { return (Tcl_Var) &varFramePtr->compiledLocals[i]; }