diff --git a/27b682284974d0cd-command-file-delete-avoid-possible-.patch b/27b682284974d0cd-command-file-delete-avoid-possible-.patch new file mode 100644 index 0000000000000000000000000000000000000000..0737d473b1557ddf6eff1f6f93a58ce9055f8ce0 --- /dev/null +++ b/27b682284974d0cd-command-file-delete-avoid-possible-.patch @@ -0,0 +1,56 @@ +From a1e20681a032f9f3ce4c47922ee8509891401691 Mon Sep 17 00:00:00 2001 +From: sebres +Date: Fri, 6 Apr 2018 17:28:56 +0000 +Subject: [PATCH 1079/1800] =?UTF-8?q?[27b682284974d0cd]=20command=20"file?= + =?UTF-8?q?=20delete":=20avoid=20possible=20race=20condition=20if=20file/d?= + =?UTF-8?q?irectory=20deleted=20after=20call=20of=20lstat,=20so=20bypass?= + =?UTF-8?q?=20ENOENT=20error=20code.=20Thanks=20to=20Rainer=20M=C3=BCller?= + =?UTF-8?q?=20(aka=20raimue)?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +--- + generic/tclFCmd.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/generic/tclFCmd.c b/generic/tclFCmd.c +index c52cd1e7e..5b2fbe1fa 100644 +--- a/generic/tclFCmd.c ++++ b/generic/tclFCmd.c +@@ -373,14 +373,7 @@ TclFileDeleteCmd( + */ + + if (Tcl_FSLstat(objv[i], &statBuf) != 0) { +- /* +- * Trying to delete a file that does not exist is not considered +- * an error, just a no-op +- */ +- +- if (errno != ENOENT) { +- result = TCL_ERROR; +- } ++ result = TCL_ERROR; + } else if (S_ISDIR(statBuf.st_mode)) { + /* + * We own a reference count on errorBuffer, if it was set as a +@@ -416,8 +409,15 @@ TclFileDeleteCmd( + } + + if (result != TCL_OK) { +- result = TCL_ERROR; + ++ /* ++ * Avoid possible race condition (file/directory deleted after call ++ * of lstat), so bypass ENOENT because not an error, just a no-op ++ */ ++ if (errno == ENOENT) { ++ result = TCL_OK; ++ continue; ++ } + /* + * It is important that we break on error, otherwise we might end + * up owning reference counts on numerous errorBuffers. +-- +2.19.1 + diff --git a/Bug-fix-in-Tcl_UtfAtIndex-for-TCL_UTF_MAX-4-only-.-W.patch b/Bug-fix-in-Tcl_UtfAtIndex-for-TCL_UTF_MAX-4-only-.-W.patch new file mode 100644 index 0000000000000000000000000000000000000000..d2de16f4215bc4c465a3849aaead321b066ade27 --- /dev/null +++ b/Bug-fix-in-Tcl_UtfAtIndex-for-TCL_UTF_MAX-4-only-.-W.patch @@ -0,0 +1,80 @@ +From f2343ead74b78173ed8b13543107a689c408e908 Mon Sep 17 00:00:00 2001 +From: "jan.nijtmans" +Date: Mon, 23 Apr 2018 23:23:00 +0000 +Subject: [PATCH 1121/1800] Bug-fix in Tcl_UtfAtIndex (for TCL_UTF_MAX=4 only). + With test-case (in "string totitle") demonstrating the bug. + +--- + generic/tclUtf.c | 8 ++++++++ + tests/string.test | 11 +++++++++-- + 2 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/generic/tclUtf.c b/generic/tclUtf.c +index 0d88d36b3..c08464b9d 100644 +--- a/generic/tclUtf.c ++++ b/generic/tclUtf.c +@@ -762,10 +762,18 @@ Tcl_UtfAtIndex( + register int index) /* The position of the desired character. */ + { + Tcl_UniChar ch = 0; ++ int len = 1; + + while (index-- > 0) { ++ len = TclUtfToUniChar(src, &ch); ++ src += len; ++ } ++#if TCL_UTF_MAX == 4 ++ if (!len) { ++ /* Index points at character following High Surrogate */ + src += TclUtfToUniChar(src, &ch); + } ++#endif + return src; + } + +diff --git a/tests/string.test b/tests/string.test +index d69fda44d..868fc25fc 100644 +--- a/tests/string.test ++++ b/tests/string.test +@@ -24,7 +24,7 @@ catch [list package require -exact Tcltest [info patchlevel]] + + testConstraint testobj [expr {[info commands testobj] != {}}] + testConstraint testindexobj [expr {[info commands testindexobj] != {}}] +-testConstraint fullutf [expr {[format %c 0x010000] != "\ufffd"}] ++testConstraint tip389 [expr {[string length \U010000] == 2}] + + # Used for constraining memory leak tests + testConstraint memory [llength [info commands memory]] +@@ -291,6 +291,9 @@ test string-5.19 {string index, bytearray object out of bounds} { + test string-5.20 {string index, bytearray object out of bounds} { + string index [binary format I* {0x50515253 0x52}] 20 + } {} ++test string-5.21 {string index, surrogates, bug [11ae2be95dac9417]} tip389 { ++ list [string index a\U100000b 1] [string index a\U100000b 2] [string index a\U100000b 3] ++} [list \U100000 {} b] + + + proc largest_int {} { +@@ -1280,7 +1283,7 @@ test string-12.22 {string range, shimmering binary/index} { + binary scan $s a* x + string range $s $s end + } 000000001 +-test string-12.23 {string range, surrogates, bug [11ae2be95dac9417]} fullutf { ++test string-12.23 {string range, surrogates, bug [11ae2be95dac9417]} tip389 { + list [string range a\U100000b 1 1] [string range a\U100000b 2 2] [string range a\U100000b 3 3] + } [list \U100000 {} b] + +@@ -1477,6 +1480,10 @@ test string-17.7 {string totitle, unicode} { + test string-17.8 {string totitle, compiled} { + lindex [string totitle [list aa bb [list cc]]] 0 + } Aa ++test string-17.9 {string totitle, surrogates, bug [11ae2be95dac9417]} tip389 { ++ list [string totitle a\U118c0c 1 1] [string totitle a\U118c0c 2 2] \ ++ [string totitle a\U118c0c 3 3] ++} [list a\U118a0c a\U118c0C a\U118c0C] + + test string-18.1 {string trim} { + list [catch {string trim} msg] $msg +-- +2.19.1 + diff --git a/Fix-11ae2be95d-tip-389-branch-string-range-errors-wi.patch b/Fix-11ae2be95d-tip-389-branch-string-range-errors-wi.patch index bdc2bfb1c4f0dfb3613946af7b8577e947777bfa..d16da42f377b4ed06e96dc83f7b4418ad6bc3c6a 100644 --- a/Fix-11ae2be95d-tip-389-branch-string-range-errors-wi.patch +++ b/Fix-11ae2be95d-tip-389-branch-string-range-errors-wi.patch @@ -15,7 +15,7 @@ index f2cda0ca8..63281a85e 100644 @@ -5445,7 +5445,7 @@ TEBCresume( valuePtr->bytes+index, 1); } else { - char buf[TCL_UTF_MAX] = ""; + char buf[TCL_UTF_MAX]; - Tcl_UniChar ch = Tcl_GetUniChar(valuePtr, index); + int ch = Tcl_GetUniChar(valuePtr, index); diff --git a/Fix-behavior-of-Tcl_GetRange-and-string-range-regard.patch b/Fix-behavior-of-Tcl_GetRange-and-string-range-regard.patch new file mode 100644 index 0000000000000000000000000000000000000000..bd435fabcc8df71a18e7130a683baab5504554a6 --- /dev/null +++ b/Fix-behavior-of-Tcl_GetRange-and-string-range-regard.patch @@ -0,0 +1,68 @@ +From 4199a703dccda415778cc3431696a6bed57ab15c Mon Sep 17 00:00:00 2001 +From: "jan.nijtmans" +Date: Thu, 11 Jan 2018 15:44:05 +0000 +Subject: [PATCH 0834/1800] Fix behavior of Tcl_GetRange() and "string range" + regarding surrogates, when Tcl is compiled with -DTCL_UTF_MAX=4. Partial fix + for bug [11ae2be95dac9417]. Also, fix typo. + +--- + generic/tclStringObj.c | 13 ++++++++++++- + tests/string.test | 4 ++++ + 2 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c +index 0f238cfb1..1b35c567b 100644 +--- a/generic/tclStringObj.c ++++ b/generic/tclStringObj.c +@@ -533,7 +533,7 @@ Tcl_GetUniChar( + * + * Get the Unicode form of the String object. If the object is not + * already a String object, it will be converted to one. If the String +- * object does not have a Unicode rep, then one is create from the UTF ++ * object does not have a Unicode rep, then one is created from the UTF + * string format. + * + * Results: +@@ -667,6 +667,17 @@ Tcl_GetRange( + stringPtr = GET_STRING(objPtr); + } + ++#if TCL_UTF_MAX == 4 ++ /* See: bug [11ae2be95dac9417] */ ++ if ((first>0) && ((stringPtr->unicode[first]&0xFC00) == 0xDC00) ++ && ((stringPtr->unicode[first-1]&0xFC00) == 0xD800)) { ++ ++first; ++ } ++ if ((last+1numChars) && ((stringPtr->unicode[last+1]&0xFC00) == 0xDC00) ++ && ((stringPtr->unicode[last]&0xFC00) == 0xD800)) { ++ ++last; ++ } ++#endif + return Tcl_NewUnicodeObj(stringPtr->unicode + first, last-first+1); + } + +diff --git a/tests/string.test b/tests/string.test +index bbba5ebec..53f1cfb73 100644 +--- a/tests/string.test ++++ b/tests/string.test +@@ -24,6 +24,7 @@ catch [list package require -exact Tcltest [info patchlevel]] + + testConstraint testobj [expr {[info commands testobj] != {}}] + testConstraint testindexobj [expr {[info commands testindexobj] != {}}] ++testConstraint fullutf [expr {[format %c 0x010000] != "\ufffd"}] + + # Used for constraining memory leak tests + testConstraint memory [llength [info commands memory]] +@@ -1276,6 +1277,9 @@ test string-12.22 {string range, shimmering binary/index} { + binary scan $s a* x + string range $s $s end + } 000000001 ++test string-12.23 {string range, surrogates, bug [11ae2be95dac9417]} fullutf { ++ list [string range a\U100000b 1 1] [string range a\U100000b 2 2] [string range a\U100000b 3 3] ++} [list \U100000 {} b] + + test string-13.1 {string repeat} { + list [catch {string repeat} msg] $msg +-- +2.19.1 + diff --git a/Fix-bug-3c32a3f8bd-segmentation-fault-in-TclOO.c-Rel.patch b/Fix-bug-3c32a3f8bd-segmentation-fault-in-TclOO.c-Rel.patch new file mode 100644 index 0000000000000000000000000000000000000000..941ba1f48fafe283d9074bf945d0aebd7b5d4d5c --- /dev/null +++ b/Fix-bug-3c32a3f8bd-segmentation-fault-in-TclOO.c-Rel.patch @@ -0,0 +1,47 @@ +From c8e3d65affc560d3053066d562920223e1780d89 Mon Sep 17 00:00:00 2001 +From: pooryorick +Date: Wed, 1 Nov 2017 21:05:32 +0000 +Subject: [PATCH 0652/1800] Fix bug 3c32a3f8bd, segmentation fault in + TclOO.c/ReleaseClassContents() for a class mixed into one of its instances. + +--- + generic/tclOO.c | 15 +++++++++++++-- + 1 file changed, 13 insertions(+), 2 deletions(-) + +diff --git a/generic/tclOO.c b/generic/tclOO.c +index e9ef2ce29..51731d3d1 100644 +--- a/generic/tclOO.c ++++ b/generic/tclOO.c +@@ -1006,8 +1006,18 @@ ReleaseClassContents( + } + for(j=0 ; jmixins.num ; j++) { + Class *mixin = instancePtr->mixins.list[j]; ++ Class *nextMixin = NULL; + if (mixin == clsPtr) { +- instancePtr->mixins.list[j] = NULL; ++ if (j < instancePtr->mixins.num - 1) { ++ nextMixin = instancePtr->mixins.list[j+1]; ++ } ++ if (j == 0) { ++ instancePtr->mixins.num = 0; ++ instancePtr->mixins.list = NULL; ++ } else { ++ instancePtr->mixins.list[j-1] = nextMixin; ++ } ++ instancePtr->mixins.num -= 1; + } + } + if (instancePtr != NULL && !IsRoot(instancePtr)) { +@@ -1181,7 +1191,8 @@ ObjectNamespaceDeleted( + if ((((Command *)oPtr->command)->flags && CMD_IS_DELETED)) { + /* + * Namespace deletion must have been triggered by a trace on command +- * deletion , meaning that ++ * deletion , meaning that ObjectRenamedTrace() is eventually going ++ * to be called . + */ + deleteAlreadyInProgress = 1; + } +-- +2.19.1 + diff --git a/Fix-for-issue-9fd5c629c1-TclOO-aborts-when-a-trace-o.patch b/Fix-for-issue-9fd5c629c1-TclOO-aborts-when-a-trace-o.patch new file mode 100644 index 0000000000000000000000000000000000000000..608d50a1fe8ef4cb3cfa774e0d6cfe019293dd0a --- /dev/null +++ b/Fix-for-issue-9fd5c629c1-TclOO-aborts-when-a-trace-o.patch @@ -0,0 +1,294 @@ +From cb0d0668227042f07802ebd4e713577cdf85a116 Mon Sep 17 00:00:00 2001 +From: pooryorick +Date: Mon, 30 Oct 2017 05:19:55 +0000 +Subject: [PATCH 0634/1800] Fix for issue 9fd5c629c1, TclOO - aborts when a + trace on command deletion deletes the object's namespace. + +--- + generic/tclBasic.c | 8 ++++---- + generic/tclFileName.c | 2 +- + generic/tclOO.c | 35 ++++++++++++++++++++++++++--------- + generic/tclOOCall.c | 8 ++++---- + generic/tclOOInt.h | 16 ++++++++-------- + tests/oo.test | 12 ++++++++++++ + 6 files changed, 55 insertions(+), 26 deletions(-) + +diff --git a/generic/tclBasic.c b/generic/tclBasic.c +index d4fa8330b..e6022ac6b 100644 +--- a/generic/tclBasic.c ++++ b/generic/tclBasic.c +@@ -3112,7 +3112,7 @@ Tcl_DeleteCommandFromToken( + /* + * We must delete this command, even though both traces and delete procs + * may try to avoid this (renaming the command etc). Also traces and +- * delete procs may try to delete the command themsevles. This flag ++ * delete procs may try to delete the command themselves. This flag + * declares that a delete is in progress and that recursive deletes should + * be ignored. + */ +@@ -7722,8 +7722,8 @@ ExprRandFunc( + iPtr->flags |= RAND_SEED_INITIALIZED; + + /* +- * Take into consideration the thread this interp is running in order +- * to insure different seeds in different threads (bug #416643) ++ * To ensure different seeds in different threads (bug #416643), ++ * take into consideration the thread this interp is running in. + */ + + iPtr->randSeed = TclpGetClicks() + (PTR2INT(Tcl_GetCurrentThread())<<12); +@@ -9091,7 +9091,7 @@ TclNRCoroutineObjCmd( + TclNRAddCallback(interp, NRCoroutineExitCallback, corPtr, + NULL, NULL, NULL); + +- /* insure that the command is looked up in the correct namespace */ ++ /* ensure that the command is looked up in the correct namespace */ + iPtr->lookupNsPtr = lookupNsPtr; + Tcl_NREvalObj(interp, Tcl_NewListObj(objc-2, objv+2), 0); + iPtr->numLevels--; +diff --git a/generic/tclFileName.c b/generic/tclFileName.c +index 150fb8c4d..15fcde74a 100644 +--- a/generic/tclFileName.c ++++ b/generic/tclFileName.c +@@ -1904,7 +1904,7 @@ TclGlob( + } + + /* +- * To process a [glob] invokation, this function may be called multiple ++ * To process a [glob] invocation, this function may be called multiple + * times. Each time, the previously discovered filenames are in the + * interpreter result. We stash that away here so the result is free for + * error messsages. +diff --git a/generic/tclOO.c b/generic/tclOO.c +index 73acce844..e9ef2ce29 100644 +--- a/generic/tclOO.c ++++ b/generic/tclOO.c +@@ -880,7 +880,7 @@ ObjectRenamedTrace( + * 2950259] + */ + +- if (((Namespace *) oPtr->namespacePtr)->earlyDeleteProc != NULL) { ++ if (oPtr->namespacePtr && ((Namespace *) oPtr->namespacePtr)->earlyDeleteProc != NULL) { + Tcl_DeleteNamespace(oPtr->namespacePtr); + } + if (oPtr->classPtr) { +@@ -1168,7 +1168,7 @@ ObjectNamespaceDeleted( + Class *clsPtr = oPtr->classPtr, *mixinPtr; + Method *mPtr; + Tcl_Obj *filterObj, *variableObj; +- int i; ++ int deleteAlreadyInProgress = 0, i; + + /* + * Instruct everyone to no longer use any allocated fields of the object. +@@ -1178,6 +1178,14 @@ ObjectNamespaceDeleted( + */ + + if (oPtr->command) { ++ if ((((Command *)oPtr->command)->flags && CMD_IS_DELETED)) { ++ /* ++ * Namespace deletion must have been triggered by a trace on command ++ * deletion , meaning that ++ */ ++ deleteAlreadyInProgress = 1; ++ } ++ + Tcl_DeleteCommandFromToken(oPtr->fPtr->interp, oPtr->command); + } + if (oPtr->myCommand) { +@@ -1273,14 +1281,17 @@ ObjectNamespaceDeleted( + + if (clsPtr->subclasses.list) { + ckfree(clsPtr->subclasses.list); ++ clsPtr->subclasses.list = NULL; + clsPtr->subclasses.num = 0; + } + if (clsPtr->instances.list) { + ckfree(clsPtr->instances.list); ++ clsPtr->instances.list = NULL; + clsPtr->instances.num = 0; + } + if (clsPtr->mixinSubs.list) { + ckfree(clsPtr->mixinSubs.list); ++ clsPtr->mixinSubs.list = NULL; + clsPtr->mixinSubs.num = 0; + } + +@@ -1305,7 +1316,13 @@ ObjectNamespaceDeleted( + * Delete the object structure itself. + */ + +- DelRef(oPtr); ++ if (deleteAlreadyInProgress) { ++ oPtr->classPtr = NULL; ++ oPtr->namespacePtr = NULL; ++ } else { ++ DelRef(oPtr); ++ } ++ + } + + /* +@@ -2433,7 +2450,7 @@ Tcl_ObjectSetMetadata( + * + * PublicObjectCmd, PrivateObjectCmd, TclOOInvokeObject -- + * +- * Main entry point for object invokations. The Public* and Private* ++ * Main entry point for object invocations. The Public* and Private* + * wrapper functions (implementations of both object instance commands + * and [my]) are just thin wrappers round the main TclOOObjectCmdCore + * function. Note that the core is function is NRE-aware. +@@ -2518,8 +2535,8 @@ TclOOInvokeObject( + * + * TclOOObjectCmdCore, FinalizeObjectCall -- + * +- * Main function for object invokations. Does call chain creation, +- * management and invokation. The function FinalizeObjectCall exists to ++ * Main function for object invocations. Does call chain creation, ++ * management and invocation. The function FinalizeObjectCall exists to + * clean up after the non-recursive processing of TclOOObjectCmdCore. + * + * ---------------------------------------------------------------------- +@@ -2531,7 +2548,7 @@ TclOOObjectCmdCore( + Tcl_Interp *interp, /* The interpreter containing the object. */ + int objc, /* How many arguments are being passed in. */ + Tcl_Obj *const *objv, /* The array of arguments. */ +- int flags, /* Whether this is an invokation through the ++ int flags, /* Whether this is an invocation through the + * public or the private command interface. */ + Class *startCls) /* Where to start in the call chain, or NULL + * if we are to start at the front with +@@ -2720,7 +2737,7 @@ Tcl_ObjectContextInvokeNext( + * call context while we process the body. However, need to adjust the + * argument-skip control because we're guaranteed to have a single prefix + * arg (i.e., 'next') and not the variable amount that can happen because +- * method invokations (i.e., '$obj meth' and 'my meth'), constructors ++ * method invocations (i.e., '$obj meth' and 'my meth'), constructors + * (i.e., '$cls new' and '$cls create obj') and destructors (no args at + * all) come through the same code. + */ +@@ -2789,7 +2806,7 @@ TclNRObjectContextInvokeNext( + * call context while we process the body. However, need to adjust the + * argument-skip control because we're guaranteed to have a single prefix + * arg (i.e., 'next') and not the variable amount that can happen because +- * method invokations (i.e., '$obj meth' and 'my meth'), constructors ++ * method invocations (i.e., '$obj meth' and 'my meth'), constructors + * (i.e., '$cls new' and '$cls create obj') and destructors (no args at + * all) come through the same code. + */ +diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c +index 3e4f561d2..d4e1e34d5 100644 +--- a/generic/tclOOCall.c ++++ b/generic/tclOOCall.c +@@ -233,7 +233,7 @@ FreeMethodNameRep( + * TclOOInvokeContext -- + * + * Invokes a single step along a method call-chain context. Note that the +- * invokation of a step along the chain can cause further steps along the ++ * invocation of a step along the chain can cause further steps along the + * chain to be invoked. Note that this function is written to be as light + * in stack usage as possible. + * +@@ -830,7 +830,7 @@ AddMethodToCallChain( + * Call chain semantics states that methods come as *late* in the + * call chain as possible. This is done by copying down the + * following methods. Note that this does not change the number of +- * method invokations in the call chain; it just rearranges them. ++ * method invocations in the call chain; it just rearranges them. + */ + + Class *declCls = callPtr->chain[i].filterDeclarer; +@@ -935,7 +935,7 @@ IsStillValid( + * TclOOGetCallContext -- + * + * Responsible for constructing the call context, an ordered list of all +- * method implementations to be called as part of a method invokation. ++ * method implementations to be called as part of a method invocation. + * This method is central to the whole operation of the OO system. + * + * ---------------------------------------------------------------------- +@@ -1517,7 +1517,7 @@ TclOORenderCallChain( + /* + * Do the actual construction of the descriptions. They consist of a list + * of triples that describe the details of how a method is understood. For +- * each triple, the first word is the type of invokation ("method" is ++ * each triple, the first word is the type of invocation ("method" is + * normal, "unknown" is special because it adds the method name as an + * extra argument when handled by some method types, and "filter" is + * special because it's a filter method). The second word is the name of +diff --git a/generic/tclOOInt.h b/generic/tclOOInt.h +index 476446dbb..11ba698a3 100644 +--- a/generic/tclOOInt.h ++++ b/generic/tclOOInt.h +@@ -149,8 +149,8 @@ typedef struct Object { + struct Foundation *fPtr; /* The basis for the object system. Putting + * this here allows the avoidance of quite a + * lot of hash lookups on the critical path +- * for object invokation and creation. */ +- Tcl_Namespace *namespacePtr;/* This object's tame namespace. */ ++ * for object invocation and creation. */ ++ Tcl_Namespace *namespacePtr;/* This object's namespace. */ + Tcl_Command command; /* Reference to this object's public + * command. */ + Tcl_Command myCommand; /* Reference to this object's internal +@@ -162,12 +162,12 @@ typedef struct Object { + /* Classes mixed into this object. */ + LIST_STATIC(Tcl_Obj *) filters; + /* List of filter names. */ +- struct Class *classPtr; /* All classes have this non-NULL; it points +- * to the class structure. Everything else has +- * this NULL. */ ++ struct Class *classPtr; /* This is non-NULL for all classes, and NULL ++ * for everything else. It points to the class ++ * structure. */ + int refCount; /* Number of strong references to this object. + * Note that there may be many more weak +- * references; this mechanism is there to ++ * references; this mechanism exists to + * avoid Tcl_Preserve. */ + int flags; + int creationEpoch; /* Unique value to make comparisons of objects +@@ -323,7 +323,7 @@ typedef struct Foundation { + } Foundation; + + /* +- * A call context structure is built when a method is called. They contain the ++ * A call context structure is built when a method is called. It contains the + * chain of method implementations that are to be invoked by a particular + * call, and the process of calling walks the chain, with the [next] command + * proceeding to the next entry in the chain. +@@ -334,7 +334,7 @@ typedef struct Foundation { + struct MInvoke { + Method *mPtr; /* Reference to the method implementation + * record. */ +- int isFilter; /* Whether this is a filter invokation. */ ++ int isFilter; /* Whether this is a filter invocation. */ + Class *filterDeclarer; /* What class decided to add the filter; if + * NULL, it was added by the object. */ + }; +diff --git a/tests/oo.test b/tests/oo.test +index 2a6eb8003..6268dc6e0 100644 +--- a/tests/oo.test ++++ b/tests/oo.test +@@ -1482,6 +1482,18 @@ test oo-11.4 {OO: cleanup} { + lappend result [bar0 destroy] [oo::object create foo] [foo destroy] \ + [oo::object create bar2] [bar2 destroy] + } {1 {can't create object "foo": command already exists with that name} destroyed {} ::foo {} ::bar2 {}} ++test oo-11.5 {OO: cleanup} { ++ oo::class create obj1 ++ ++ trace add command obj1 delete {apply {{name1 name2 action} { ++ set namespace [info object namespace $name1] ++ namespace delete $namespace ++ }}} ++ ++ rename obj1 {} ++ # No segmentation fault ++ return done ++} done + + test oo-12.1 {OO: filters} { + oo::class create Aclass +-- +2.19.1 + diff --git a/Fix-handling-of-surrogates-when-TCL_UTF_MAX-3-in-Tcl.patch b/Fix-handling-of-surrogates-when-TCL_UTF_MAX-3-in-Tcl.patch new file mode 100644 index 0000000000000000000000000000000000000000..37776f504f39dc8b779901c7221fa181cc86bf95 --- /dev/null +++ b/Fix-handling-of-surrogates-when-TCL_UTF_MAX-3-in-Tcl.patch @@ -0,0 +1,148 @@ +From ad342ab381c2c25e3b9fb35f7d989c1da6dbc0bc Mon Sep 17 00:00:00 2001 +From: "jan.nijtmans" +Date: Thu, 28 Dec 2017 18:49:24 +0000 +Subject: [PATCH 0807/1800] Fix handling of surrogates (when TCL_UTF_MAX > 3) + in Tcl_UtfNcmp()/Tcl_UtfNcasecmp()/TclUtfCasecmp(). Backported from + core-8-branch, where this was fixed already. + +--- + generic/tclPkg.c | 6 ++--- + generic/tclUtf.c | 57 ++++++++++++++++++++++++------------------------ + 2 files changed, 32 insertions(+), 31 deletions(-) + +diff --git a/generic/tclPkg.c b/generic/tclPkg.c +index 4f6faa87c..6d826a96d 100644 +--- a/generic/tclPkg.c ++++ b/generic/tclPkg.c +@@ -414,7 +414,7 @@ PkgRequireCore( + + continue; + } +- ++ + /* Check satisfaction of requirements before considering the current version further. */ + if (reqc > 0) { + satisfies = SomeRequirementSatisfied(availVersion, reqc, reqv); +@@ -424,7 +424,7 @@ PkgRequireCore( + continue; + } + } +- ++ + if (bestPtr != NULL) { + int res = CompareVersions(availVersion, bestVersion, NULL); + +@@ -485,7 +485,7 @@ PkgRequireCore( + /* + * Clean up memorized internal reps, if any. + */ +- ++ + if (bestVersion != NULL) { + ckfree(bestVersion); + bestVersion = NULL; +diff --git a/generic/tclUtf.c b/generic/tclUtf.c +index c60e99ed8..6255a4e24 100644 +--- a/generic/tclUtf.c ++++ b/generic/tclUtf.c +@@ -726,8 +726,7 @@ Tcl_UniCharAtIndex( + { + Tcl_UniChar ch = 0; + +- while (index >= 0) { +- index--; ++ while (index-- >= 0) { + src += TclUtfToUniChar(src, &ch); + } + return ch; +@@ -757,8 +756,7 @@ Tcl_UtfAtIndex( + { + Tcl_UniChar ch = 0; + +- while (index > 0) { +- index--; ++ while (index-- > 0) { + src += TclUtfToUniChar(src, &ch); + } + return src; +@@ -1072,16 +1070,17 @@ Tcl_UtfNcmp( + + cs += TclUtfToUniChar(cs, &ch1); + ct += TclUtfToUniChar(ct, &ch2); ++ if (ch1 != ch2) { + #if TCL_UTF_MAX == 4 +- /* map high surrogate characters to values > 0xffff */ +- if ((ch1 & 0xFC00) == 0xD800) { +- ch1 += 0x4000; +- } +- if ((ch2 & 0xFC00) == 0xD800) { +- ch2 += 0x4000; +- } ++ /* Surrogates always report higher than non-surrogates */ ++ if (((ch1 & 0xFC00) == 0xD800)) { ++ if ((ch2 & 0xFC00) != 0xD800) { ++ return ch1; ++ } ++ } else if ((ch2 & 0xFC00) == 0xD800) { ++ return -ch2; ++ } + #endif +- if (ch1 != ch2) { + return (ch1 - ch2); + } + } +@@ -1122,16 +1121,17 @@ Tcl_UtfNcasecmp( + */ + cs += TclUtfToUniChar(cs, &ch1); + ct += TclUtfToUniChar(ct, &ch2); ++ if (ch1 != ch2) { + #if TCL_UTF_MAX == 4 +- /* map high surrogate characters to values > 0xffff */ +- if ((ch1 & 0xFC00) == 0xD800) { +- ch1 += 0x4000; +- } +- if ((ch2 & 0xFC00) == 0xD800) { +- ch2 += 0x4000; +- } ++ /* Surrogates always report higher than non-surrogates */ ++ if (((ch1 & 0xFC00) == 0xD800)) { ++ if ((ch2 & 0xFC00) != 0xD800) { ++ return ch1; ++ } ++ } else if ((ch2 & 0xFC00) == 0xD800) { ++ return -ch2; ++ } + #endif +- if (ch1 != ch2) { + ch1 = Tcl_UniCharToLower(ch1); + ch2 = Tcl_UniCharToLower(ch2); + if (ch1 != ch2) { +@@ -1170,16 +1170,17 @@ TclUtfCasecmp( + while (*cs && *ct) { + cs += TclUtfToUniChar(cs, &ch1); + ct += TclUtfToUniChar(ct, &ch2); ++ if (ch1 != ch2) { + #if TCL_UTF_MAX == 4 +- /* map high surrogate characters to values > 0xffff */ +- if ((ch1 & 0xFC00) == 0xD800) { +- ch1 += 0x4000; +- } +- if ((ch2 & 0xFC00) == 0xD800) { +- ch2 += 0x4000; +- } ++ /* Surrogates always report higher than non-surrogates */ ++ if (((ch1 & 0xFC00) == 0xD800)) { ++ if ((ch2 & 0xFC00) != 0xD800) { ++ return ch1; ++ } ++ } else if ((ch2 & 0xFC00) == 0xD800) { ++ return -ch2; ++ } + #endif +- if (ch1 != ch2) { + ch1 = Tcl_UniCharToLower(ch1); + ch2 = Tcl_UniCharToLower(ch2); + if (ch1 != ch2) { +-- +2.19.1 + diff --git a/In-registry-protect-keyName-from-being-NULL-This-act.patch b/In-registry-protect-keyName-from-being-NULL-This-act.patch new file mode 100644 index 0000000000000000000000000000000000000000..121e24e37e43e54b3ed37d08da6981cf5176da1e --- /dev/null +++ b/In-registry-protect-keyName-from-being-NULL-This-act.patch @@ -0,0 +1,150 @@ +From eb3a1a3eaa3b789fc4cf34746a29245ccb1f57ea Mon Sep 17 00:00:00 2001 +From: "jan.nijtmans" +Date: Thu, 4 Oct 2018 19:22:37 +0000 +Subject: [PATCH 1432/1800] In registry, protect "keyName" from being NULL: + This actually can lead to crashed (I experienced this ...). Update version to + 1.3.3, and align implementation in all branches (core-8-6-branch and higher) + +--- + library/reg/pkgIndex.tcl | 4 ++-- + win/tclWinReg.c | 34 +++++++++++++++------------------- + 2 files changed, 17 insertions(+), 21 deletions(-) + +diff --git a/library/reg/pkgIndex.tcl b/library/reg/pkgIndex.tcl +index b1fe234c4..ee559b5a8 100755 +--- a/library/reg/pkgIndex.tcl ++++ b/library/reg/pkgIndex.tcl +@@ -1,9 +1,9 @@ + if {([info commands ::tcl::pkgconfig] eq "") + || ([info sharedlibextension] ne ".dll")} return + if {[::tcl::pkgconfig get debug]} { +- package ifneeded registry 1.3.2 \ ++ package ifneeded registry 1.3.3 \ + [list load [file join $dir tclreg13g.dll] registry] + } else { +- package ifneeded registry 1.3.2 \ ++ package ifneeded registry 1.3.3 \ + [list load [file join $dir tclreg13.dll] registry] + } +diff --git a/win/tclWinReg.c b/win/tclWinReg.c +index de48b9b4b..f3d7a07c8 100644 +--- a/win/tclWinReg.c ++++ b/win/tclWinReg.c +@@ -22,13 +22,6 @@ + #endif + #include + +-#ifndef UNICODE +-# undef Tcl_WinTCharToUtf +-# define Tcl_WinTCharToUtf(a,b,c) Tcl_ExternalToUtfDString(NULL,a,b,c) +-# undef Tcl_WinUtfToTChar +-# define Tcl_WinUtfToTChar(a,b,c) Tcl_UtfToExternalDString(NULL,a,b,c) +-#endif /* !UNICODE */ +- + /* + * Ensure that we can say which registry is being accessed. + */ +@@ -163,7 +156,7 @@ Registry_Init( + cmd = Tcl_CreateObjCommand(interp, "registry", RegistryObjCmd, + interp, DeleteCmd); + Tcl_SetAssocData(interp, REGISTRY_ASSOC_KEY, NULL, cmd); +- return Tcl_PkgProvide(interp, "registry", "1.3.2"); ++ return Tcl_PkgProvide(interp, "registry", "1.3.3"); + } + + /* +@@ -414,12 +407,12 @@ DeleteKey( + */ + + keyName = Tcl_GetString(keyNameObj); +- buffer = ckalloc(keyNameObj->length + 1); ++ buffer = Tcl_Alloc(keyNameObj->length + 1); + strcpy(buffer, keyName); + + if (ParseKeyName(interp, buffer, &hostName, &rootKey, + &keyName) != TCL_OK) { +- ckfree(buffer); ++ Tcl_Free(buffer); + return TCL_ERROR; + } + +@@ -427,7 +420,7 @@ DeleteKey( + Tcl_SetObjResult(interp, + Tcl_NewStringObj("bad key: cannot delete root keys", -1)); + Tcl_SetErrorCode(interp, "WIN_REG", "DEL_ROOT_KEY", NULL); +- ckfree(buffer); ++ Tcl_Free(buffer); + return TCL_ERROR; + } + +@@ -442,7 +435,7 @@ DeleteKey( + mode |= KEY_ENUMERATE_SUB_KEYS | DELETE; + result = OpenSubKey(hostName, rootKey, keyName, mode, 0, &subkey); + if (result != ERROR_SUCCESS) { +- ckfree(buffer); ++ Tcl_Free(buffer); + if (result == ERROR_FILE_NOT_FOUND) { + return TCL_OK; + } +@@ -470,7 +463,7 @@ DeleteKey( + } + + RegCloseKey(subkey); +- ckfree(buffer); ++ Tcl_Free(buffer); + return result; + } + +@@ -603,8 +596,7 @@ GetKeyNames( + } + break; + } +- Tcl_WinTCharToUtf(buffer, bufSize * sizeof(TCHAR), &ds); +- name = Tcl_DStringValue(&ds); ++ name = Tcl_WinTCharToUtf(buffer, bufSize * sizeof(TCHAR), &ds); + if (pattern && !Tcl_StringMatch(name, pattern)) { + Tcl_DStringFree(&ds); + continue; +@@ -950,7 +942,7 @@ OpenKey( + + keyName = Tcl_GetString(keyNameObj); + length = keyNameObj->length; +- buffer = ckalloc(length + 1); ++ buffer = Tcl_Alloc(length + 1); + strcpy(buffer, keyName); + + result = ParseKeyName(interp, buffer, &hostName, &rootKey, &keyName); +@@ -966,7 +958,7 @@ OpenKey( + } + } + +- ckfree(buffer); ++ Tcl_Free(buffer); + return result; + } + +@@ -1019,7 +1011,9 @@ OpenSubKey( + * this key must be closed by the caller. + */ + +- keyName = (char *) Tcl_WinUtfToTChar(keyName, -1, &buf); ++ if (keyName) { ++ keyName = (char *) Tcl_WinUtfToTChar(keyName, -1, &buf); ++ } + if (flags & REG_CREATE) { + DWORD create; + +@@ -1037,7 +1031,9 @@ OpenSubKey( + result = RegOpenKeyEx(rootKey, (TCHAR *)keyName, 0, mode, + keyPtr); + } +- Tcl_DStringFree(&buf); ++ if (keyName) { ++ Tcl_DStringFree(&buf); ++ } + + /* + * Be sure to close the root key since we are done with it now. +-- +2.19.1 + diff --git a/Plug-leak-in-TclSetEnv.patch b/Plug-leak-in-TclSetEnv.patch new file mode 100644 index 0000000000000000000000000000000000000000..4024c3f3a4c19ec4efb5b3b038f0799ab128a3c7 --- /dev/null +++ b/Plug-leak-in-TclSetEnv.patch @@ -0,0 +1,43 @@ +From fdc88b9a1be8cdd3d3e98406f244edfec6050771 Mon Sep 17 00:00:00 2001 +From: pooryorick +Date: Mon, 18 Jun 2018 05:59:22 +0000 +Subject: [PATCH 1260/1800] Plug leak in TclSetEnv. + +--- + generic/tclEnv.c | 4 ++++ + tests/pkgIndex.tcl | 8 ++++---- + 2 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/generic/tclEnv.c b/generic/tclEnv.c +index 8cc4b746a..c559c69b8 100644 +--- a/generic/tclEnv.c ++++ b/generic/tclEnv.c +@@ -730,6 +730,10 @@ TclFinalizeEnvironment(void) + ckfree(env.cache); + env.cache = NULL; + env.cacheSize = 0; ++ if ((env.ourEnviron != NULL)) { ++ ckfree(env.ourEnviron); ++ env.ourEnviron = NULL; ++ } + #ifndef USE_PUTENV + env.ourEnvironSize = 0; + #endif +diff --git a/tests/pkgIndex.tcl b/tests/pkgIndex.tcl +index 48ab71b73..0feb0eb38 100644 +--- a/tests/pkgIndex.tcl ++++ b/tests/pkgIndex.tcl +@@ -1,6 +1,6 @@ + #! /usr/bin/env tclsh + +-package ifneeded tcltests 0.1 { +- source [file dirname [file dirname [file normalize [info script]/...]]]/tcltests.tcl +- package provide tcltests 0.1 +-} ++package ifneeded tcltests 0.1 " ++ source [list $dir]/tcltests.tcl ++ package provide tcltests 0.1 ++" +-- +2.19.1 + diff --git a/amend-after-merge-8.6th-provide-additionally-an-erro.patch b/amend-after-merge-8.6th-provide-additionally-an-erro.patch new file mode 100644 index 0000000000000000000000000000000000000000..ddc4c0fe3378125631aaa7d58a80ecff0c066ab2 --- /dev/null +++ b/amend-after-merge-8.6th-provide-additionally-an-erro.patch @@ -0,0 +1,25 @@ +From d72e2b37fd678418e2ee74b681501337a4c2be4d Mon Sep 17 00:00:00 2001 +From: sebres +Date: Thu, 26 Jul 2018 18:56:41 +0000 +Subject: [PATCH 1332/1800] amend after merge: 8.6th provide additionally an + error-code (so missing `errCode = "OVERFLOW"`) + +--- + generic/tclStringObj.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c +index 3139be44d..493378c38 100644 +--- a/generic/tclStringObj.c ++++ b/generic/tclStringObj.c +@@ -1878,6 +1878,7 @@ Tcl_AppendFormatToObj( + width = strtoul(format, &end, 10); + if (width < 0) { + msg = overflow; ++ errCode = "OVERFLOW"; + goto errorMsg; + } + format = end; +-- +2.19.1 + diff --git a/closes-d051b77fc18d7340-fixed-segfault-by-integer-ov.patch b/closes-d051b77fc18d7340-fixed-segfault-by-integer-ov.patch new file mode 100644 index 0000000000000000000000000000000000000000..1a4507ed98200506f9f32557ef8a9ddb0c09401d --- /dev/null +++ b/closes-d051b77fc18d7340-fixed-segfault-by-integer-ov.patch @@ -0,0 +1,29 @@ +From 20c0ed50e35e6075f82eb87fdeb7a13e522b710a Mon Sep 17 00:00:00 2001 +From: sebres +Date: Thu, 26 Jul 2018 15:57:38 +0000 +Subject: [PATCH 1329/1800] closes [d051b77fc18d7340]: fixed segfault by + integer overflow (if width by format like "%4000000000g" overflows to + negative values by scan of length) + +--- + generic/tclStringObj.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c +index 996be77ee..462ef0424 100644 +--- a/generic/tclStringObj.c ++++ b/generic/tclStringObj.c +@@ -1938,6 +1938,10 @@ Tcl_AppendFormatToObj( + width = 0; + if (isdigit(UCHAR(ch))) { + width = strtoul(format, &end, 10); ++ if (width < 0) { ++ msg = overflow; ++ goto errorMsg; ++ } + format = end; + step = TclUtfToUniChar(format, &ch); + } else if (ch == '*') { +-- +2.19.1 + diff --git a/fixes-4ee9b4f3e965a7da5133-result-of-command-time-ov.patch b/fixes-4ee9b4f3e965a7da5133-result-of-command-time-ov.patch new file mode 100644 index 0000000000000000000000000000000000000000..3811d47f454ba45d48b21e8483e731bfdb21566c --- /dev/null +++ b/fixes-4ee9b4f3e965a7da5133-result-of-command-time-ov.patch @@ -0,0 +1,27 @@ +From b985529f9905b326d7da711ffbe28d80418c7ef8 Mon Sep 17 00:00:00 2001 +From: sebres +Date: Mon, 28 Jan 2019 16:12:56 +0000 +Subject: [PATCH 1693/1800] fixes [4ee9b4f3e965a7da5133]: result of command + `time` overflows by single iteration longer as 35 minutes (uses wide-int + instead of int as result now). + +--- + generic/tclCmdMZ.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c +index db4e57b1e..b1ba3ae01 100644 +--- a/generic/tclCmdMZ.c ++++ b/generic/tclCmdMZ.c +@@ -3931,7 +3931,7 @@ Tcl_TimeObjCmd( + * Use int obj since we know time is not fractional. [Bug 1202178] + */ + +- objs[0] = Tcl_NewIntObj((count <= 0) ? 0 : (int) totalMicroSec); ++ objs[0] = Tcl_NewWideIntObj((count <= 0) ? 0 : (Tcl_WideInt)totalMicroSec); + } else { + objs[0] = Tcl_NewDoubleObj(totalMicroSec/count); + } +-- +2.19.1 + diff --git a/fixes-segfault-00d04c4f12-unfulfilled-base64-strict-.patch b/fixes-segfault-00d04c4f12-unfulfilled-base64-strict-.patch new file mode 100644 index 0000000000000000000000000000000000000000..476970e7be1d926a111e5103db98f0acea08f48c --- /dev/null +++ b/fixes-segfault-00d04c4f12-unfulfilled-base64-strict-.patch @@ -0,0 +1,43 @@ +From a6ff061087eaf644eb30f0e8334059c5cbb0dbc1 Mon Sep 17 00:00:00 2001 +From: sebres +Date: Thu, 15 Nov 2018 22:31:39 +0000 +Subject: [PATCH 1592/1800] fixes segfault [00d04c4f12], unfulfilled base64 + (strict and non-strict mode, etc). + +--- + generic/tclBinary.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/generic/tclBinary.c b/generic/tclBinary.c +index bb918f27f..571eb07b1 100644 +--- a/generic/tclBinary.c ++++ b/generic/tclBinary.c +@@ -2914,6 +2914,11 @@ BinaryDecode64( + } else if (i > 1) { + c = '='; + } else { ++ if (strict && i <= 1) { ++ /* single resp. unfulfilled char (each 4th next single char) ++ * is rather bad64 error case in strict mode */ ++ goto bad64; ++ } + cut += 3; + break; + } +@@ -2944,9 +2949,11 @@ BinaryDecode64( + value = (value << 6) | 0x3e; + } else if (c == '/') { + value = (value << 6) | 0x3f; +- } else if (c == '=') { ++ } else if (c == '=' && ( ++ !strict || i > 1) /* "=" and "a=" is rather bad64 error case in strict mode */ ++ ) { + value <<= 6; +- cut++; ++ if (i) cut++; + } else if (strict || !isspace(c)) { + goto bad64; + } else { +-- +2.19.1 + diff --git a/new-package.patch b/new-package.patch new file mode 100644 index 0000000000000000000000000000000000000000..2a943fdbd3605078c2a6570ab792f7cbba9d0771 --- /dev/null +++ b/new-package.patch @@ -0,0 +1,155 @@ +From 07fa7f623c1efa576128d3710689efed2bc427a0 Mon Sep 17 00:00:00 2001 +From: pooryorick +Date: Sat, 16 Jun 2018 17:55:31 +0000 +Subject: [PATCH 1251/1800] new package tcltests exclude some exec.test + tests when running under valgrind + +--- + tests/all.tcl | 9 +++++++++ + tests/exec.test | 25 +++++++++++++++---------- + tests/ioCmd.test | 1 - + tests/pkgIndex.tcl | 6 ++++++ + 4 files changed, 30 insertions(+), 11 deletions(-) + create mode 100644 tests/pkgIndex.tcl + +diff --git a/tests/all.tcl b/tests/all.tcl +index 69a16ba0c..ad372dbb4 100644 +--- a/tests/all.tcl ++++ b/tests/all.tcl +@@ -18,5 +18,14 @@ configure {*}$argv -testdir [file dir [info script]] + if {[singleProcess]} { + interp debug {} -frame 1 + } ++ ++set testsdir [file dirname [file dirname [file normalize [info script]/...]]] ++lappend auto_path $testsdir {*}[apply {{testsdir args} { ++ lmap x $args { ++ if {$x eq $testsdir} continue ++ lindex $x ++ } ++}} $testsdir {*}$auto_path] ++ + runAllTests + proc exit args {} +diff --git a/tests/exec.test b/tests/exec.test +index 5542f3d8d..6570e5723 100644 +--- a/tests/exec.test ++++ b/tests/exec.test +@@ -11,9 +11,14 @@ + # See the file "license.terms" for information on usage and redistribution of + # this file, and for a DISCLAIMER OF ALL WARRANTIES. + ++# There is no point in running Valgrind on cases where [exec] forks but then ++# fails and the child process doesn't go through full cleanup. ++ + package require tcltest 2 + namespace import -force ::tcltest::* + ++package require tcltests ++ + # All tests require the "exec" command. + # Skip them if exec is not defined. + testConstraint exec [llength [info commands exec]] +@@ -325,11 +330,11 @@ test exec-8.2 {long input and output} {exec} { + + # Commands that return errors. + +-test exec-9.1 {commands returning errors} {exec} { ++test exec-9.1 {commands returning errors} {exec notValgrind} { + set x [catch {exec gorp456} msg] + list $x [string tolower $msg] [string tolower $errorCode] + } {1 {couldn't execute "gorp456": no such file or directory} {posix enoent {no such file or directory}}} +-test exec-9.2 {commands returning errors} {exec} { ++test exec-9.2 {commands returning errors} {exec notValgrind} { + string tolower [list [catch {exec [interpreter] echo foo | foo123} msg] $msg $errorCode] + } {1 {couldn't execute "foo123": no such file or directory} {posix enoent {no such file or directory}}} + test exec-9.3 {commands returning errors} -constraints {exec stdio} -body { +@@ -339,7 +344,7 @@ test exec-9.4 {commands returning errors} -constraints {exec stdio} -body { + exec [interpreter] $path(exit) 43 | [interpreter] $path(echo) "foo bar" + } -returnCodes error -result {foo bar + child process exited abnormally} +-test exec-9.5 {commands returning errors} -constraints {exec stdio} -body { ++test exec-9.5 {commands returning errors} -constraints {exec stdio notValgrind} -body { + exec gorp456 | [interpreter] echo a b c + } -returnCodes error -result {couldn't execute "gorp456": no such file or directory} + test exec-9.6 {commands returning errors} -constraints {exec} -body { +@@ -428,13 +433,13 @@ test exec-10.19 {errors in exec invocation} -constraints {exec} -body { + exec cat >@ $f + } -returnCodes error -result "channel \"$f\" wasn't opened for writing" + close $f +-test exec-10.20 {errors in exec invocation} -constraints {exec} -body { ++test exec-10.20 {errors in exec invocation} -constraints {exec notValgrind} -body { + exec ~non_existent_user/foo/bar + } -returnCodes error -result {user "non_existent_user" doesn't exist} +-test exec-10.21 {errors in exec invocation} -constraints {exec} -body { ++test exec-10.21 {errors in exec invocation} -constraints {exec notValgrind} -body { + exec [interpreter] true | ~xyzzy_bad_user/x | false + } -returnCodes error -result {user "xyzzy_bad_user" doesn't exist} +-test exec-10.22 {errors in exec invocation} -constraints exec -body { ++test exec-10.22 {errors in exec invocation} -constraints {exec notValgrind} -body { + exec echo test > ~non_existent_user/foo/bar + } -returnCodes error -result {user "non_existent_user" doesn't exist} + # Commands in background. +@@ -510,7 +515,7 @@ test exec-13.1 {setting errorCode variable} {exec} { + test exec-13.2 {setting errorCode variable} {exec} { + list [catch {exec [interpreter] $path(cat) > a/b/c} msg] [string tolower $errorCode] + } {1 {posix enoent {no such file or directory}}} +-test exec-13.3 {setting errorCode variable} {exec} { ++test exec-13.3 {setting errorCode variable} {exec notValgrind} { + set x [catch {exec _weird_cmd_} msg] + list $x [string tolower $msg] [lindex $errorCode 0] \ + [string tolower [lrange $errorCode 2 end]] +@@ -548,7 +553,7 @@ test exec-14.2 {-keepnewline switch} -constraints {exec} -body { + test exec-14.3 {unknown switch} -constraints {exec} -body { + exec -gorp + } -returnCodes error -result {bad option "-gorp": must be -ignorestderr, -keepnewline, or --} +-test exec-14.4 {-- switch} -constraints {exec} -body { ++test exec-14.4 {-- switch} -constraints {exec notValgrind} -body { + exec -- -gorp + } -returnCodes error -result {couldn't execute "-gorp": no such file or directory} + test exec-14.5 {-ignorestderr switch} {exec} { +@@ -662,7 +667,7 @@ test exec-18.2 {exec cat deals with weird file names} -body { + # Note that this test cannot be adapted to work on Windows; that platform has + # no kernel support for an analog of O_APPEND. OTOH, that means we can assume + # that there is a POSIX shell... +-test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix} -setup { ++test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix notValgrind} -setup { + set tmpfile [makeFile {0} tmpfile.exec-19.1] + } -body { + # Note that we have to allow for the current contents of the temporary +@@ -675,7 +680,7 @@ test exec-19.1 {exec >> uses O_APPEND} -constraints {exec unix} -setup { + {for a in a b c; do sleep 1; echo $a; done} >>$tmpfile & + exec /bin/sh -c \ + {for a in d e f; do sleep 1; echo $a >&2; done} 2>>$tmpfile & +- # The above four shell invokations take about 3 seconds to finish, so allow ++ # The above four shell invocations take about 3 seconds to finish, so allow + # 5s (in case the machine is busy) + after 5000 + # Check that no bytes have got lost through mixups with overlapping +diff --git a/tests/ioCmd.test b/tests/ioCmd.test +index cab4e9734..ae58025d9 100644 +--- a/tests/ioCmd.test ++++ b/tests/ioCmd.test +@@ -3781,7 +3781,6 @@ test iocmd.tf-32.0 {origin thread of moved channel gone} -match glob -body { + # Use constraints to skip this test while valgrinding so this expected leak + # doesn't prevent a finding of "leak-free". + # +-testConstraint notValgrind [expr {![testConstraint valgrind]}] + test iocmd.tf-32.1 {origin thread of moved channel destroyed during access} -match glob -body { + + #puts <<$tcltest::mainThread>>main +diff --git a/tests/pkgIndex.tcl b/tests/pkgIndex.tcl +new file mode 100644 +index 000000000..48ab71b73 +--- /dev/null ++++ b/tests/pkgIndex.tcl +@@ -0,0 +1,6 @@ ++#! /usr/bin/env tclsh ++ ++package ifneeded tcltests 0.1 { ++ source [file dirname [file dirname [file normalize [info script]/...]]]/tcltests.tcl ++ package provide tcltests 0.1 ++} +-- +2.19.1 + diff --git a/tcl-8.6.10-tcltests-path-fix.patch b/tcl-8.6.10-tcltests-path-fix.patch deleted file mode 100644 index 62c55e9cc6d74b38a92e7341c0301eded7121030..0000000000000000000000000000000000000000 --- a/tcl-8.6.10-tcltests-path-fix.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/unix/Makefile.in b/unix/Makefile.in -index 99bdf05..0b2f660 100644 ---- a/unix/Makefile.in -+++ b/unix/Makefile.in -@@ -788,7 +788,7 @@ topDirName: - # This keeps tcltest from picking up an already installed version of the Tcl - # library. - SHELL_ENV = @LD_LIBRARY_PATH_VAR@=`pwd`:${@LD_LIBRARY_PATH_VAR@} \ -- TCLLIBPATH="@abs_builddir@/pkgs" \ -+ TCLLIBPATH="@abs_builddir@/pkgs @abs_builddir@/../tests" \ - TCL_LIBRARY="${TCL_BUILDTIME_LIBRARY}" - - ${TCLTEST_EXE}: ${TCLTEST_OBJS} ${TCL_LIB_FILE} ${TCL_STUB_LIB_FILE} ${BUILD_DLTEST} diff --git a/tcl-8.6.10-autopath.patch b/tcl-8.6.3-autopath.patch similarity index 69% rename from tcl-8.6.10-autopath.patch rename to tcl-8.6.3-autopath.patch index f5ac0ba94489fdfcba9abd29acfc468a91c40816..98e5a19a5d2620a886d3d50eb3720b288c34aa0c 100644 --- a/tcl-8.6.10-autopath.patch +++ b/tcl-8.6.3-autopath.patch @@ -1,5 +1,5 @@ diff --git a/library/auto.tcl b/library/auto.tcl -index a7a8979..892c2c4 100644 +index 02edcc4..cd3b587 100644 --- a/library/auto.tcl +++ b/library/auto.tcl @@ -81,6 +81,13 @@ proc tcl_findLibrary {basename version patch initScript enVarName varName} { @@ -17,7 +17,7 @@ index a7a8979..892c2c4 100644 # Tcl library as well as allowing loading of libraries added to the # auto_path that is not relative to the core library or binary paths. diff --git a/library/init.tcl b/library/init.tcl -index 5cda0d9..ffeb301 100644 +index f1f7704..03ede56 100644 --- a/library/init.tcl +++ b/library/init.tcl @@ -47,16 +47,11 @@ if {![info exists auto_path]} { @@ -39,18 +39,18 @@ index 5cda0d9..ffeb301 100644 foreach Dir $::tcl_pkgPath { if {$Dir ni $::auto_path} { diff --git a/unix/configure.in b/unix/configure.in -index 0d3f426..13ce9db 100755 +index e44d554..c017eaa 100755 --- a/unix/configure.in +++ b/unix/configure.in -@@ -866,9 +866,9 @@ if test "$FRAMEWORK_BUILD" = "1" ; then +@@ -886,9 +886,9 @@ if test "$FRAMEWORK_BUILD" = "1" ; then test -z "$TCL_MODULE_PATH" && \ - TCL_MODULE_PATH="~/Library/Tcl /Library/Tcl" + TCL_MODULE_PATH="~/Library/Tcl /Library/Tcl /System/Library/Tcl" elif test "$prefix/lib" != "$libdir"; then -- test -z "$TCL_PACKAGE_PATH" && TCL_PACKAGE_PATH="${libdir} ${prefix}/lib ${TCL_PACKAGE_PATH}" -+ test -z "$TCL_PACKAGE_PATH" && TCL_PACKAGE_PATH="${libdir}/tcl8.6 ${prefix}/share/tcl8.6 ${libdir}/tk8.6 ${prefix}/share/tk8.6 ${TCL_PACKAGE_PATH}" +- TCL_PACKAGE_PATH="${libdir} ${prefix}/lib ${TCL_PACKAGE_PATH}" ++ TCL_PACKAGE_PATH="${libdir}/tcl8.6 ${prefix}/share/tcl8.6 ${libdir}/tk8.6 ${prefix}/share/tk8.6 ${TCL_PACKAGE_PATH}" else -- test -z "$TCL_PACKAGE_PATH" && TCL_PACKAGE_PATH="${prefix}/lib ${TCL_PACKAGE_PATH}" -+ test -z "$TCL_PACKAGE_PATH" && TCL_PACKAGE_PATH="${libdir}/tcl8.6 ${prefix}/share/tcl8.6 ${libdir}/tk8.6 ${prefix}/share/tk8.6 ${TCL_PACKAGE_PATH}" +- TCL_PACKAGE_PATH="${prefix}/lib ${TCL_PACKAGE_PATH}" ++ TCL_PACKAGE_PATH="${libdir}/tcl8.6 ${prefix}/share/tcl8.6 ${libdir}/tk8.6 ${prefix}/share/tk8.6 ${TCL_PACKAGE_PATH}" fi #-------------------------------------------------------------------- diff --git a/tcl-8.6.5-parallel-make-fix.patch b/tcl-8.6.5-parallel-make-fix.patch new file mode 100644 index 0000000000000000000000000000000000000000..d3ac913461fb728095dd37bcc1b650bc2d7114e7 --- /dev/null +++ b/tcl-8.6.5-parallel-make-fix.patch @@ -0,0 +1,265 @@ +diff --git a/unix/Makefile.in b/unix/Makefile.in +index bc73118..cc438a4 100644 +--- a/unix/Makefile.in ++++ b/unix/Makefile.in +@@ -1351,196 +1351,196 @@ tclThreadTest.o: $(GENERIC_DIR)/tclThreadTest.c + tclTomMathInterface.o: $(GENERIC_DIR)/tclTomMathInterface.c $(MATHHDRS) + $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclTomMathInterface.c + +-bncore.o: $(TOMMATH_DIR)/bncore.c $(MATHHDRS) ++bncore.o: $(TOMMATH_DIR)/bncore.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bncore.c + +-bn_reverse.o: $(TOMMATH_DIR)/bn_reverse.c $(MATHHDRS) ++bn_reverse.o: $(TOMMATH_DIR)/bn_reverse.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_reverse.c + +-bn_fast_s_mp_mul_digs.o: $(TOMMATH_DIR)/bn_fast_s_mp_mul_digs.c $(MATHHDRS) ++bn_fast_s_mp_mul_digs.o: $(TOMMATH_DIR)/bn_fast_s_mp_mul_digs.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_fast_s_mp_mul_digs.c + +-bn_fast_s_mp_sqr.o: $(TOMMATH_DIR)/bn_fast_s_mp_sqr.c $(MATHHDRS) ++bn_fast_s_mp_sqr.o: $(TOMMATH_DIR)/bn_fast_s_mp_sqr.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_fast_s_mp_sqr.c + +-bn_mp_add.o: $(TOMMATH_DIR)/bn_mp_add.c $(MATHHDRS) ++bn_mp_add.o: $(TOMMATH_DIR)/bn_mp_add.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_add.c + +-bn_mp_add_d.o: $(TOMMATH_DIR)/bn_mp_add_d.c $(MATHHDRS) ++bn_mp_add_d.o: $(TOMMATH_DIR)/bn_mp_add_d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_add_d.c + +-bn_mp_and.o: $(TOMMATH_DIR)/bn_mp_and.c $(MATHHDRS) ++bn_mp_and.o: $(TOMMATH_DIR)/bn_mp_and.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_and.c + +-bn_mp_clamp.o: $(TOMMATH_DIR)/bn_mp_clamp.c $(MATHHDRS) ++bn_mp_clamp.o: $(TOMMATH_DIR)/bn_mp_clamp.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_clamp.c + +-bn_mp_clear.o: $(TOMMATH_DIR)/bn_mp_clear.c $(MATHHDRS) ++bn_mp_clear.o: $(TOMMATH_DIR)/bn_mp_clear.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_clear.c + +-bn_mp_clear_multi.o: $(TOMMATH_DIR)/bn_mp_clear_multi.c $(MATHHDRS) ++bn_mp_clear_multi.o: $(TOMMATH_DIR)/bn_mp_clear_multi.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_clear_multi.c + +-bn_mp_cmp.o: $(TOMMATH_DIR)/bn_mp_cmp.c $(MATHHDRS) ++bn_mp_cmp.o: $(TOMMATH_DIR)/bn_mp_cmp.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_cmp.c + +-bn_mp_cmp_d.o: $(TOMMATH_DIR)/bn_mp_cmp_d.c $(MATHHDRS) ++bn_mp_cmp_d.o: $(TOMMATH_DIR)/bn_mp_cmp_d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_cmp_d.c + +-bn_mp_cmp_mag.o: $(TOMMATH_DIR)/bn_mp_cmp_mag.c $(MATHHDRS) ++bn_mp_cmp_mag.o: $(TOMMATH_DIR)/bn_mp_cmp_mag.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_cmp_mag.c + +-bn_mp_cnt_lsb.o: $(TOMMATH_DIR)/bn_mp_cnt_lsb.c $(MATHHDRS) ++bn_mp_cnt_lsb.o: $(TOMMATH_DIR)/bn_mp_cnt_lsb.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_cnt_lsb.c + +-bn_mp_copy.o: $(TOMMATH_DIR)/bn_mp_copy.c $(MATHHDRS) ++bn_mp_copy.o: $(TOMMATH_DIR)/bn_mp_copy.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_copy.c + +-bn_mp_count_bits.o: $(TOMMATH_DIR)/bn_mp_count_bits.c $(MATHHDRS) ++bn_mp_count_bits.o: $(TOMMATH_DIR)/bn_mp_count_bits.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_count_bits.c + +-bn_mp_div.o: $(TOMMATH_DIR)/bn_mp_div.c $(MATHHDRS) ++bn_mp_div.o: $(TOMMATH_DIR)/bn_mp_div.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_div.c + +-bn_mp_div_d.o: $(TOMMATH_DIR)/bn_mp_div_d.c $(MATHHDRS) ++bn_mp_div_d.o: $(TOMMATH_DIR)/bn_mp_div_d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_div_d.c + +-bn_mp_div_2.o: $(TOMMATH_DIR)/bn_mp_div_2.c $(MATHHDRS) ++bn_mp_div_2.o: $(TOMMATH_DIR)/bn_mp_div_2.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_div_2.c + +-bn_mp_div_2d.o: $(TOMMATH_DIR)/bn_mp_div_2d.c $(MATHHDRS) ++bn_mp_div_2d.o: $(TOMMATH_DIR)/bn_mp_div_2d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_div_2d.c + +-bn_mp_div_3.o: $(TOMMATH_DIR)/bn_mp_div_3.c $(MATHHDRS) ++bn_mp_div_3.o: $(TOMMATH_DIR)/bn_mp_div_3.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_div_3.c + +-bn_mp_exch.o: $(TOMMATH_DIR)/bn_mp_exch.c $(MATHHDRS) ++bn_mp_exch.o: $(TOMMATH_DIR)/bn_mp_exch.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_exch.c + +-bn_mp_expt_d.o: $(TOMMATH_DIR)/bn_mp_expt_d.c $(MATHHDRS) ++bn_mp_expt_d.o: $(TOMMATH_DIR)/bn_mp_expt_d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_expt_d.c + +-bn_mp_grow.o: $(TOMMATH_DIR)/bn_mp_grow.c $(MATHHDRS) ++bn_mp_grow.o: $(TOMMATH_DIR)/bn_mp_grow.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_grow.c + +-bn_mp_init.o: $(TOMMATH_DIR)/bn_mp_init.c $(MATHHDRS) ++bn_mp_init.o: $(TOMMATH_DIR)/bn_mp_init.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_init.c + +-bn_mp_init_copy.o: $(TOMMATH_DIR)/bn_mp_init_copy.c $(MATHHDRS) ++bn_mp_init_copy.o: $(TOMMATH_DIR)/bn_mp_init_copy.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_init_copy.c + +-bn_mp_init_multi.o: $(TOMMATH_DIR)/bn_mp_init_multi.c $(MATHHDRS) ++bn_mp_init_multi.o: $(TOMMATH_DIR)/bn_mp_init_multi.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_init_multi.c + +-bn_mp_init_set.o: $(TOMMATH_DIR)/bn_mp_init_set.c $(MATHHDRS) ++bn_mp_init_set.o: $(TOMMATH_DIR)/bn_mp_init_set.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_init_set.c + +-bn_mp_init_set_int.o: $(TOMMATH_DIR)/bn_mp_init_set_int.c $(MATHHDRS) ++bn_mp_init_set_int.o: $(TOMMATH_DIR)/bn_mp_init_set_int.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_init_set_int.c + +-bn_mp_init_size.o:$(TOMMATH_DIR)/bn_mp_init_size.c $(MATHHDRS) ++bn_mp_init_size.o:$(TOMMATH_DIR)/bn_mp_init_size.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_init_size.c + +-bn_mp_karatsuba_mul.o: $(TOMMATH_DIR)/bn_mp_karatsuba_mul.c $(MATHHDRS) ++bn_mp_karatsuba_mul.o: $(TOMMATH_DIR)/bn_mp_karatsuba_mul.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_karatsuba_mul.c + +-bn_mp_karatsuba_sqr.o: $(TOMMATH_DIR)/bn_mp_karatsuba_sqr.c $(MATHHDRS) ++bn_mp_karatsuba_sqr.o: $(TOMMATH_DIR)/bn_mp_karatsuba_sqr.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_karatsuba_sqr.c + +-bn_mp_lshd.o: $(TOMMATH_DIR)/bn_mp_lshd.c $(MATHHDRS) ++bn_mp_lshd.o: $(TOMMATH_DIR)/bn_mp_lshd.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_lshd.c + +-bn_mp_mod.o: $(TOMMATH_DIR)/bn_mp_mod.c $(MATHHDRS) ++bn_mp_mod.o: $(TOMMATH_DIR)/bn_mp_mod.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_mod.c + +-bn_mp_mod_2d.o: $(TOMMATH_DIR)/bn_mp_mod_2d.c $(MATHHDRS) ++bn_mp_mod_2d.o: $(TOMMATH_DIR)/bn_mp_mod_2d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_mod_2d.c + +-bn_mp_mul.o: $(TOMMATH_DIR)/bn_mp_mul.c $(MATHHDRS) ++bn_mp_mul.o: $(TOMMATH_DIR)/bn_mp_mul.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_mul.c + +-bn_mp_mul_2.o: $(TOMMATH_DIR)/bn_mp_mul_2.c $(MATHHDRS) ++bn_mp_mul_2.o: $(TOMMATH_DIR)/bn_mp_mul_2.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_mul_2.c + +-bn_mp_mul_2d.o: $(TOMMATH_DIR)/bn_mp_mul_2d.c $(MATHHDRS) ++bn_mp_mul_2d.o: $(TOMMATH_DIR)/bn_mp_mul_2d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_mul_2d.c + +-bn_mp_mul_d.o: $(TOMMATH_DIR)/bn_mp_mul_d.c $(MATHHDRS) ++bn_mp_mul_d.o: $(TOMMATH_DIR)/bn_mp_mul_d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_mul_d.c + +-bn_mp_neg.o: $(TOMMATH_DIR)/bn_mp_neg.c $(MATHHDRS) ++bn_mp_neg.o: $(TOMMATH_DIR)/bn_mp_neg.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_neg.c + +-bn_mp_or.o: $(TOMMATH_DIR)/bn_mp_or.c $(MATHHDRS) ++bn_mp_or.o: $(TOMMATH_DIR)/bn_mp_or.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_or.c + +-bn_mp_radix_size.o: $(TOMMATH_DIR)/bn_mp_radix_size.c $(MATHHDRS) ++bn_mp_radix_size.o: $(TOMMATH_DIR)/bn_mp_radix_size.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_radix_size.c + +-bn_mp_radix_smap.o: $(TOMMATH_DIR)/bn_mp_radix_smap.c $(MATHHDRS) ++bn_mp_radix_smap.o: $(TOMMATH_DIR)/bn_mp_radix_smap.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_radix_smap.c + +-bn_mp_read_radix.o: $(TOMMATH_DIR)/bn_mp_read_radix.c $(MATHHDRS) ++bn_mp_read_radix.o: $(TOMMATH_DIR)/bn_mp_read_radix.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_read_radix.c + +-bn_mp_rshd.o: $(TOMMATH_DIR)/bn_mp_rshd.c $(MATHHDRS) ++bn_mp_rshd.o: $(TOMMATH_DIR)/bn_mp_rshd.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_rshd.c + +-bn_mp_set.o: $(TOMMATH_DIR)/bn_mp_set.c $(MATHHDRS) ++bn_mp_set.o: $(TOMMATH_DIR)/bn_mp_set.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_set.c + +-bn_mp_set_int.o: $(TOMMATH_DIR)/bn_mp_set_int.c $(MATHHDRS) ++bn_mp_set_int.o: $(TOMMATH_DIR)/bn_mp_set_int.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_set_int.c + +-bn_mp_shrink.o: $(TOMMATH_DIR)/bn_mp_shrink.c $(MATHHDRS) ++bn_mp_shrink.o: $(TOMMATH_DIR)/bn_mp_shrink.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_shrink.c + +-bn_mp_sqr.o: $(TOMMATH_DIR)/bn_mp_sqr.c $(MATHHDRS) ++bn_mp_sqr.o: $(TOMMATH_DIR)/bn_mp_sqr.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_sqr.c + +-bn_mp_sqrt.o: $(TOMMATH_DIR)/bn_mp_sqrt.c $(MATHHDRS) ++bn_mp_sqrt.o: $(TOMMATH_DIR)/bn_mp_sqrt.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_sqrt.c + +-bn_mp_sub.o: $(TOMMATH_DIR)/bn_mp_sub.c $(MATHHDRS) ++bn_mp_sub.o: $(TOMMATH_DIR)/bn_mp_sub.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_sub.c + +-bn_mp_sub_d.o: $(TOMMATH_DIR)/bn_mp_sub_d.c $(MATHHDRS) ++bn_mp_sub_d.o: $(TOMMATH_DIR)/bn_mp_sub_d.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_sub_d.c + +-bn_mp_to_unsigned_bin.o: $(TOMMATH_DIR)/bn_mp_to_unsigned_bin.c $(MATHHDRS) ++bn_mp_to_unsigned_bin.o: $(TOMMATH_DIR)/bn_mp_to_unsigned_bin.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_to_unsigned_bin.c + +-bn_mp_to_unsigned_bin_n.o: $(TOMMATH_DIR)/bn_mp_to_unsigned_bin_n.c $(MATHHDRS) ++bn_mp_to_unsigned_bin_n.o: $(TOMMATH_DIR)/bn_mp_to_unsigned_bin_n.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_to_unsigned_bin_n.c + +-bn_mp_toom_mul.o: $(TOMMATH_DIR)/bn_mp_toom_mul.c $(MATHHDRS) ++bn_mp_toom_mul.o: $(TOMMATH_DIR)/bn_mp_toom_mul.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_toom_mul.c + +-bn_mp_toom_sqr.o: $(TOMMATH_DIR)/bn_mp_toom_sqr.c $(MATHHDRS) ++bn_mp_toom_sqr.o: $(TOMMATH_DIR)/bn_mp_toom_sqr.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_toom_sqr.c + +-bn_mp_toradix_n.o: $(TOMMATH_DIR)/bn_mp_toradix_n.c $(MATHHDRS) ++bn_mp_toradix_n.o: $(TOMMATH_DIR)/bn_mp_toradix_n.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_toradix_n.c + +-bn_mp_unsigned_bin_size.o: $(TOMMATH_DIR)/bn_mp_unsigned_bin_size.c $(MATHHDRS) ++bn_mp_unsigned_bin_size.o: $(TOMMATH_DIR)/bn_mp_unsigned_bin_size.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_unsigned_bin_size.c + +-bn_mp_xor.o: $(TOMMATH_DIR)/bn_mp_xor.c $(MATHHDRS) ++bn_mp_xor.o: $(TOMMATH_DIR)/bn_mp_xor.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_xor.c + +-bn_mp_zero.o: $(TOMMATH_DIR)/bn_mp_zero.c $(MATHHDRS) ++bn_mp_zero.o: $(TOMMATH_DIR)/bn_mp_zero.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_mp_zero.c + +-bn_s_mp_add.o: $(TOMMATH_DIR)/bn_s_mp_add.c $(MATHHDRS) ++bn_s_mp_add.o: $(TOMMATH_DIR)/bn_s_mp_add.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_s_mp_add.c + +-bn_s_mp_mul_digs.o: $(TOMMATH_DIR)/bn_s_mp_mul_digs.c $(MATHHDRS) ++bn_s_mp_mul_digs.o: $(TOMMATH_DIR)/bn_s_mp_mul_digs.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_s_mp_mul_digs.c + +-bn_s_mp_sqr.o: $(TOMMATH_DIR)/bn_s_mp_sqr.c $(MATHHDRS) ++bn_s_mp_sqr.o: $(TOMMATH_DIR)/bn_s_mp_sqr.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_s_mp_sqr.c + +-bn_s_mp_sub.o: $(TOMMATH_DIR)/bn_s_mp_sub.c $(MATHHDRS) ++bn_s_mp_sub.o: $(TOMMATH_DIR)/bn_s_mp_sub.c $(MATHHDRS) $(DTRACE_HDR) + $(CC) -c $(CC_SWITCHES) $(TOMMATH_DIR)/bn_s_mp_sub.c + + tclUnixChan.o: $(UNIX_DIR)/tclUnixChan.c $(IOHDR) diff --git a/tcl-8.6.10-conf.patch b/tcl-8.6.8-conf.patch similarity index 88% rename from tcl-8.6.10-conf.patch rename to tcl-8.6.8-conf.patch index 6dfa386edd27939310c4e98379e30af423d7068d..2ec2c90f800c948f8123532a18d84d4dac4a0e32 100644 --- a/tcl-8.6.10-conf.patch +++ b/tcl-8.6.8-conf.patch @@ -1,8 +1,8 @@ diff --git a/unix/tcl.m4 b/unix/tcl.m4 -index 0e146e4..180fff1 100644 +index 8a802fb..0df92fd 100644 --- a/unix/tcl.m4 +++ b/unix/tcl.m4 -@@ -1410,12 +1410,12 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ +@@ -1402,12 +1402,12 @@ AC_DEFUN([SC_CONFIG_CFLAGS], [ # get rid of the warnings. #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES" diff --git a/tcl-8.6.10-hidden.patch b/tcl-8.6.8-hidden.patch similarity index 85% rename from tcl-8.6.10-hidden.patch rename to tcl-8.6.8-hidden.patch index 00c20468c224cddc403665b7c7ec23344ce214fd..8a4e4a192614d0a3ab8a2cb8c73669f9ebb13bf0 100644 --- a/tcl-8.6.10-hidden.patch +++ b/tcl-8.6.8-hidden.patch @@ -1,8 +1,8 @@ diff --git a/generic/tclInt.h b/generic/tclInt.h -index 39fb740..bbe342b 100644 +index 91c8b96..623a598 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h -@@ -3277,7 +3277,7 @@ MODULE_SCOPE void TclClockInit(Tcl_Interp *interp); +@@ -3215,7 +3215,7 @@ MODULE_SCOPE void TclClockInit(Tcl_Interp *interp); MODULE_SCOPE int TclClockOldscanObjCmd( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); @@ -11,7 +11,7 @@ index 39fb740..bbe342b 100644 Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); MODULE_SCOPE int Tcl_ConcatObjCmd(ClientData clientData, -@@ -3458,7 +3458,7 @@ MODULE_SCOPE int Tcl_RenameObjCmd(ClientData clientData, +@@ -3396,7 +3396,7 @@ MODULE_SCOPE int Tcl_RenameObjCmd(ClientData clientData, MODULE_SCOPE int Tcl_RepresentationCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); @@ -21,7 +21,7 @@ index 39fb740..bbe342b 100644 Tcl_Obj *const objv[]); MODULE_SCOPE int Tcl_ScanObjCmd(ClientData clientData, diff --git a/generic/tclPort.h b/generic/tclPort.h -index 9485567..f329cde 100644 +index 12a60db..d817154 100644 --- a/generic/tclPort.h +++ b/generic/tclPort.h @@ -20,7 +20,7 @@ diff --git a/tcl-core8.6.10-src.tar.gz b/tcl-core8.6.8-src.tar.gz similarity index 44% rename from tcl-core8.6.10-src.tar.gz rename to tcl-core8.6.8-src.tar.gz index 1c32f7d9db9380ec329fc4f20f839cb3202b1493..2d190c79c0d59a57f28b799dfe6ad5284fe09b06 100644 Binary files a/tcl-core8.6.10-src.tar.gz and b/tcl-core8.6.8-src.tar.gz differ diff --git a/tcl.spec b/tcl.spec index 6119b84898c4e02a108ac957a66540dd5bc2e6aa..cdcd17b219fbc652b8742d8d673243e7eb66435f 100644 --- a/tcl.spec +++ b/tcl.spec @@ -1,8 +1,8 @@ %define MAJOR 8.6 Name: tcl -Version: 8.6.10 -Release: 1 +Version: 8.6.8 +Release: 8 Epoch: 1 Summary: The Tool Command Language implementation License: BSD @@ -14,17 +14,31 @@ Provides: tcl(abi) = %{MAJOR} Obsoletes: tcl-tcldict <= %{version} Provides: tcl-tcldict = %{version} -Patch0: tcl-8.6.10-autopath.patch -Patch1: tcl-8.6.10-conf.patch -Patch2: tcl-8.6.10-hidden.patch -Patch3: tcl-8.6.10-tcltests-path-fix.patch -Patch4: stay-out-of-internals-when-nice-interfaces-are-avail.patch -Patch5: oops.patch -Patch6: Fix-error-message-for-min-math-functions-to-for-for-.patch -Patch7: Fix-11ae2be95d-tip-389-branch-string-range-errors-wi.patch -Patch8: Improved-overflow-prevention-1.patch -Patch9: Improved-overflow-prevention-2.patch -Patch10: fix-exec-test-error.patch +Patch0000: tcl-8.6.3-autopath.patch +Patch0001: tcl-8.6.8-conf.patch +Patch0002: tcl-8.6.8-hidden.patch +Patch0003: tcl-8.6.5-parallel-make-fix.patch + +Patch0004: stay-out-of-internals-when-nice-interfaces-are-avail.patch +Patch0005: oops.patch +Patch0006: Fix-for-issue-9fd5c629c1-TclOO-aborts-when-a-trace-o.patch +Patch0007: Fix-bug-3c32a3f8bd-segmentation-fault-in-TclOO.c-Rel.patch +Patch0008: Fix-error-message-for-min-math-functions-to-for-for-.patch +Patch0009: Fix-behavior-of-Tcl_GetRange-and-string-range-regard.patch +Patch0010: Fix-11ae2be95d-tip-389-branch-string-range-errors-wi.patch +Patch0011: Improved-overflow-prevention-1.patch +Patch0012: Improved-overflow-prevention-2.patch +Patch0013: 27b682284974d0cd-command-file-delete-avoid-possible-.patch +Patch0014: Fix-handling-of-surrogates-when-TCL_UTF_MAX-3-in-Tcl.patch +Patch0015: Bug-fix-in-Tcl_UtfAtIndex-for-TCL_UTF_MAX-4-only-.-W.patch +Patch0016: new-package.patch +Patch0017: Plug-leak-in-TclSetEnv.patch +Patch0018: closes-d051b77fc18d7340-fixed-segfault-by-integer-ov.patch +Patch0020: amend-after-merge-8.6th-provide-additionally-an-erro.patch +Patch0021: In-registry-protect-keyName-from-being-NULL-This-act.patch +Patch0022: fixes-segfault-00d04c4f12-unfulfilled-base64-strict-.patch +Patch0023: fixes-4ee9b4f3e965a7da5133-result-of-command-time-ov.patch +Patch0024: fix-exec-test-error.patch %description Tcl(Tool Command Language) provides a powerful platform for creating integration applications @@ -62,7 +76,6 @@ autoconf %install cd unix make INSTALL_ROOT=$RPM_BUILD_ROOT TCL_LIBRARY=%{_datadir}/%{name}%{MAJOR} install - cd .. ln -s tclsh%{MAJOR} %{buildroot}%{_bindir}/tclsh ln -s lib%{name}%{MAJOR}.so $RPM_BUILD_ROOT%{_libdir}/lib%{name}.so @@ -102,7 +115,7 @@ make test %files %defattr(-,root,root) -%doc README.md changes COPYING +%doc README changes COPYING %{_bindir}/tclsh* %dir %{_libdir}/%{name}%{MAJOR} %{_datadir}/%{name}%{MAJOR} @@ -126,42 +139,36 @@ make test %{_mandir}/mann/* %changelog -* Wed Aug 19 2020 zhangrui - 1:8.6.10-1 -- Type:enhancement -- ID:NA -- SUG:NA -- DESC:update to 8.6.10 - -* Tue Mar 17 2020 chengquan - 1:8.6.8-8 +* Tue Mar 17 2020 chengquan - 1:8.6.8.8 - Type:bugfix - ID:NA - SUG:NA - DESC:Rollback some patches & add /usr/lib64/tcl* -* Sat Jan 11 2020 zhangguangzhi - 1:8.6.8-7 +* Sat Jan 11 2020 zhangguangzhi - 1:8.6.8.7 - Type:bugfix - ID:NA - SUG:NA - DESC:del patch to be consistent with open source -* Wed Dec 25 2019 chengquan - 1:8.6.8-6 +* Wed Dec 25 2019 chengquan - 1:8.6.8.6 - Type:bugfix - ID:NA - SUG:NA - DESC:fix bug in update help package -* Mon Nov 4 2019 shenyangyang - 1:8.6.8-5 +* Mon Nov 4 2019 shenyangyang - 1:8.6.8.5 - Type:NA - ID:NA - SUG:NA - DESC:add use/bin/tclsh8.6 -* Fri Nov 1 2019 caomeng - 1:8.6.8-4 +* Fri Nov 1 2019 caomeng - 1:8.6.8.4 - Type:NA - ID:NA - SUG:NA - DESC:fix tclConfig.sh problem -* Mon Sep 09 2019 Huiming Xie - 1:8.6.8-3 +* Mon Sep 09 2019 Huiming Xie - 1:8.6.8.3 - Package init diff --git a/tcl.yaml b/tcl.yaml deleted file mode 100644 index af2f65b90a2680c92a9a04ad698073850c2cae8a..0000000000000000000000000000000000000000 --- a/tcl.yaml +++ /dev/null @@ -1,4 +0,0 @@ -version_control: github -src_repo: tcltk/tcl -tag_prefix: ^core- -seperator: "-"