Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix bad memory access problems found by Miguel Sofer when valgrinding. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
963a7f31e2e359e6403a6d5e3b9e1d65 |
User & Date: | dkf 2013-01-04 14:38:37 |
Context
2013-01-04
| ||
15:44 | merge check-in: 7daaf951c4 user: mig tags: mig-strip-brutal | |
15:01 | Fix memory leak in [format] compiler. check-in: 113b75cd58 user: dkf tags: trunk | |
14:38 | Fix bad memory access problems found by Miguel Sofer when valgrinding. check-in: 963a7f31e2 user: dkf tags: trunk | |
11:14 | Improve code generation for many simple core ensemble subcommands. check-in: 5a0e18f766 user: dkf tags: trunk | |
Changes
Changes to generic/tclCompCmdsSZ.c.
︙ | ︙ | |||
2733 2734 2735 2736 2737 2738 2739 | Tcl_Obj *leadingWord; DefineLineInformation; /* TIP #280 */ numWords = parsePtr->numWords-1; flags = 1; varTokenPtr = TokenAfter(parsePtr->tokenPtr); leadingWord = Tcl_NewObj(); | | | 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 | Tcl_Obj *leadingWord; DefineLineInformation; /* TIP #280 */ numWords = parsePtr->numWords-1; flags = 1; varTokenPtr = TokenAfter(parsePtr->tokenPtr); leadingWord = Tcl_NewObj(); if (numWords > 0 && TclWordKnownAtCompileTime(varTokenPtr, leadingWord)) { int len; const char *bytes = Tcl_GetStringFromObj(leadingWord, &len); if (len == 11 && !strncmp("-nocomplain", bytes, 11)) { flags = 0; varTokenPtr = TokenAfter(varTokenPtr); numWords--; |
︙ | ︙ |
Changes to generic/tclEnsemble.c.
︙ | ︙ | |||
2952 2953 2954 2955 2956 2957 2958 | * Tcl crash open to exploit. */ doneMapLookup: Tcl_ListObjAppendElement(NULL, replaced, replacement); if (Tcl_ListObjGetElements(NULL, targetCmdObj, &len, &elems) != TCL_OK) { goto failed; | > > > > > > | < | | 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 | * Tcl crash open to exploit. */ doneMapLookup: Tcl_ListObjAppendElement(NULL, replaced, replacement); if (Tcl_ListObjGetElements(NULL, targetCmdObj, &len, &elems) != TCL_OK) { goto failed; } else if (len != 1) { /* * Note that at this point we know we can't issue any special * instruction sequence as the mapping isn't one that we support at * the compiled level. */ goto cleanup; } targetCmdObj = elems[0]; oldCmdPtr = cmdPtr; Tcl_IncrRefCount(targetCmdObj); newCmdPtr = (Command *) Tcl_GetCommandFromObj(interp, targetCmdObj); TclDecrRefCount(targetCmdObj); |
︙ | ︙ | |||
3007 3008 3009 3010 3011 3012 3013 | /* * Failed to do a full compile for some reason. Try to do a direct invoke * instead of going through the ensemble lookup process again. */ failed: | | | 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 | /* * Failed to do a full compile for some reason. Try to do a direct invoke * instead of going through the ensemble lookup process again. */ failed: if (depth < 250) { if (depth > 1) { if (!invokeAnyway) { cmdPtr = oldCmdPtr; depth--; } (void) Tcl_ListObjReplace(NULL, replaced, depth, 2, 0, NULL); } |
︙ | ︙ |