Compare commits

...
Author SHA1 Message Date
dgp 85c5fc95c7 Proposed fix for 3389764. Have "path" dup routine duplicate the pattern
of a value with a cyclic reference to itself.  Don't keep a reference to
the value getting dup'd so the assumptions of cycle prevention in bytecode
compilation are satisfied.
2011-08-11 20:04:57 +00:00
+12 -12
View File
@@ -2617,29 +2617,29 @@ DupFsPathInternalRep(
SETPATHOBJ(copyPtr, copyFsPathPtr);
if (srcFsPathPtr->translatedPathPtr != NULL) {
if (srcFsPathPtr->translatedPathPtr == srcPtr) {
/* Cycle in src -> make cycle in copy. */
copyFsPathPtr->translatedPathPtr = copyPtr;
} else {
copyFsPathPtr->translatedPathPtr = srcFsPathPtr->translatedPathPtr;
if (copyFsPathPtr->translatedPathPtr != copyPtr) {
if (copyFsPathPtr->translatedPathPtr != NULL) {
Tcl_IncrRefCount(copyFsPathPtr->translatedPathPtr);
}
} else {
copyFsPathPtr->translatedPathPtr = NULL;
}
if (srcFsPathPtr->normPathPtr != NULL) {
if (srcFsPathPtr->normPathPtr == srcPtr) {
/* Cycle in src -> make cycle in copy. */
copyFsPathPtr->normPathPtr = copyPtr;
} else {
copyFsPathPtr->normPathPtr = srcFsPathPtr->normPathPtr;
if (copyFsPathPtr->normPathPtr != copyPtr) {
if (copyFsPathPtr->normPathPtr != NULL) {
Tcl_IncrRefCount(copyFsPathPtr->normPathPtr);
}
} else {
copyFsPathPtr->normPathPtr = NULL;
}
if (srcFsPathPtr->cwdPtr != NULL) {
copyFsPathPtr->cwdPtr = srcFsPathPtr->cwdPtr;
copyFsPathPtr->cwdPtr = srcFsPathPtr->cwdPtr;
if (copyFsPathPtr->cwdPtr != NULL) {
Tcl_IncrRefCount(copyFsPathPtr->cwdPtr);
} else {
copyFsPathPtr->cwdPtr = NULL;
}
copyFsPathPtr->flags = srcFsPathPtr->flags;