From 5b089007e59a3004a7c2119b6aae463e2cdb7a6a820850138622b5be2b4a6590 Mon Sep 17 00:00:00 2001 From: Reinhard Max Date: Wed, 23 Nov 2022 16:16:20 +0000 Subject: [PATCH] - New version 8.6.13: * (bug)[26f132] Crash when sizeof(int) < sizeof(void *) * (TIP 623)[e9a271] Tcl_GetRange index args < 0 * (bug)[e5ed1b] numeric IPv6 in URLs * (bug)[8eb64b] http package tolerant again invalid reply header * (bug)[6898f9] http package failed detection of shiftjis charset * (bug)[55bf73] Avoid connection reuse after response code 101. * (bug)[713653] FP rounding exposed by x86 musl * (bug)[b3977d] Process CR-LF split across packets * (bug)[4eb3a1] crash due to undetected bytecode invalidity * (bug)[55a02f] Fallback init env(HOME) from USERPROFILE * (bug)[1073da] crash writing invalid utf-8 * (new) Update to Unicode-15 * Many code fixes to avoid overflow or undefined behavior. - Add tcl-refchan-mode-needed.patch to allow refchans to be opened for neither reading nor writing, but still handle events. OBS-URL: https://build.opensuse.org/package/show/devel:languages:tcl/tcl?expand=0&rev=147 --- tcl-refchan-mode-needed.patch | 98 +++++++++++++++++++++++++++++++++++ tcl.changes | 20 +++++++ tcl.spec | 6 ++- tcl8.6.12-src.tar.gz | 3 -- tcl8.6.13-src.tar.gz | 3 ++ 5 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 tcl-refchan-mode-needed.patch delete mode 100644 tcl8.6.12-src.tar.gz create mode 100644 tcl8.6.13-src.tar.gz diff --git a/tcl-refchan-mode-needed.patch b/tcl-refchan-mode-needed.patch new file mode 100644 index 0000000..ab5dded --- /dev/null +++ b/tcl-refchan-mode-needed.patch @@ -0,0 +1,98 @@ +--- doc/refchan.n.orig ++++ doc/refchan.n +@@ -53,8 +53,8 @@ here, then the \fBfinalize\fR subcommand + .PP + The \fImode\fR argument tells the handler whether the channel was + opened for reading, writing, or both. It is a list containing any of +-the strings \fBread\fR or \fBwrite\fR. The list will always +-contain at least one element. ++the strings \fBread\fR or \fBwrite\fR. The list may be empty, but ++will usually contain at least one element. + .PP + The subcommand must throw an error if the chosen mode is not + supported by the \fIcmdPrefix\fR. +--- generic/tclIORChan.c.orig ++++ generic/tclIORChan.c +@@ -425,7 +425,7 @@ static void UnmarshallErrorResult(Tcl_I + */ + + static int EncodeEventMask(Tcl_Interp *interp, +- const char *objName, Tcl_Obj *obj, int *mask); ++ const char *objName, Tcl_Obj *obj, int *mask, int needed); + static Tcl_Obj * DecodeEventMask(int mask); + static ReflectedChannel * NewReflectedChannel(Tcl_Interp *interp, + Tcl_Obj *cmdpfxObj, int mode, Tcl_Obj *handleObj); +@@ -532,11 +532,11 @@ TclChanCreateObjCmd( + + /* + * First argument is a list of modes. Allowed entries are "read", "write". +- * Expect at least one list element. Abbreviations are ok. ++ * Empty list is uncommon, but allowed. Abbreviations are ok. + */ + + modeObj = objv[MODE]; +- if (EncodeEventMask(interp, "mode", objv[MODE], &mode) != TCL_OK) { ++ if (EncodeEventMask(interp, "mode", objv[MODE], &mode, 0) != TCL_OK) { + return TCL_ERROR; + } + +@@ -902,7 +902,7 @@ TclChanPostEventObjCmd( + * "write". Expect at least one list element. Abbreviations are ok. + */ + +- if (EncodeEventMask(interp, "event", objv[EVENT], &events) != TCL_OK) { ++ if (EncodeEventMask(interp, "event", objv[EVENT], &events, 1) != TCL_OK) { + return TCL_ERROR; + } + +@@ -2007,8 +2007,9 @@ ReflectGetOption( + * EncodeEventMask -- + * + * This function takes a list of event items and constructs the +- * equivalent internal bitmask. The list must contain at least one +- * element. Elements are "read", "write", or any unique abbreviation of ++ * equivalent internal bitmask. The list may be empty if the last ++ * argument is 0, otherwise it must contain at least one element. ++ * Elements are "read", "write", or any unique abbreviation of + * them. Note that the bitmask is not changed if problems are + * encountered. + * +@@ -2028,7 +2029,8 @@ EncodeEventMask( + Tcl_Interp *interp, + const char *objName, + Tcl_Obj *obj, +- int *mask) ++ int *mask, ++ int needed) + { + int events; /* Mask of events to post */ + int listc; /* #elements in eventspec list */ +@@ -2040,7 +2042,7 @@ EncodeEventMask( + return TCL_ERROR; + } + +- if (listc < 1) { ++ if (needed && listc < 1) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "bad %s list: is empty", objName)); + return TCL_ERROR; +--- tests/ioCmd.test.orig ++++ tests/ioCmd.test +@@ -670,12 +670,12 @@ test iocmd-21.1 {chan create, wrong#args + catch {chan create a b c} msg + set msg + } {wrong # args: should be "chan create mode cmdprefix"} +-test iocmd-21.2 {chan create, invalid r/w mode, empty} { +- proc foo {} {} +- catch {chan create {} foo} msg ++test iocmd-21.2 {chan create, r/w mode empty} { ++ proc foo {cmd args} { return "initialize finalize watch" } ++ set chan [chan create {} foo] ++ close $chan + rename foo {} +- set msg +-} {bad mode list: is empty} ++} {} + test iocmd-21.3 {chan create, invalid r/w mode, bad string} { + proc foo {} {} + catch {chan create {c} foo} msg diff --git a/tcl.changes b/tcl.changes index e147a08..5ce0d6d 100644 --- a/tcl.changes +++ b/tcl.changes @@ -1,3 +1,23 @@ +------------------------------------------------------------------- +Wed Nov 23 16:05:02 UTC 2022 - Reinhard Max + +- New version 8.6.13: + * (bug)[26f132] Crash when sizeof(int) < sizeof(void *) + * (TIP 623)[e9a271] Tcl_GetRange index args < 0 + * (bug)[e5ed1b] numeric IPv6 in URLs + * (bug)[8eb64b] http package tolerant again invalid reply header + * (bug)[6898f9] http package failed detection of shiftjis charset + * (bug)[55bf73] Avoid connection reuse after response code 101. + * (bug)[713653] FP rounding exposed by x86 musl + * (bug)[b3977d] Process CR-LF split across packets + * (bug)[4eb3a1] crash due to undetected bytecode invalidity + * (bug)[55a02f] Fallback init env(HOME) from USERPROFILE + * (bug)[1073da] crash writing invalid utf-8 + * (new) Update to Unicode-15 + * Many code fixes to avoid overflow or undefined behavior. +- Add tcl-refchan-mode-needed.patch to allow refchans to be opened + for neither reading nor writing, but still handle events. + ------------------------------------------------------------------- Wed Sep 21 14:25:37 UTC 2022 - Dirk Müller diff --git a/tcl.spec b/tcl.spec index 2fe5fb3..f02ce41 100644 --- a/tcl.spec +++ b/tcl.spec @@ -22,11 +22,11 @@ Name: tcl URL: http://www.tcl.tk -Version: 8.6.12 +Version: 8.6.13 Release: 0 %define rrc %{nil} %define TCL_MINOR %(echo %version | cut -c1-3) -%define itclver 4.2.2 +%define itclver 4.2.3 BuildRoot: %{_tmppath}/%{name}-%{version}-build Summary: The Tcl Programming Language License: TCL @@ -48,6 +48,7 @@ Source0: http://prdownloads.sourceforge.net/tcl/%{name}%{version}%{rrc}-s Source1: tcl-rpmlintrc Source2: baselibs.conf Source3: macros.tcl +Patch0: tcl-refchan-mode-needed.patch BuildRequires: autoconf BuildRequires: pkg-config BuildRequires: zlib-devel @@ -91,6 +92,7 @@ if ! test -d pkgs/itcl%itclver; then : Version mismatch in itcl, please chek the %%itclver macro! exit 1 fi +%patch0 # The SQLite extension is provided by the sqlite3 package, # so don't build it here. diff --git a/tcl8.6.12-src.tar.gz b/tcl8.6.12-src.tar.gz deleted file mode 100644 index 1bbde79..0000000 --- a/tcl8.6.12-src.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:26c995dd0f167e48b11961d891ee555f680c175f7173ff8cb829f4ebcde4c1a6 -size 10353486 diff --git a/tcl8.6.13-src.tar.gz b/tcl8.6.13-src.tar.gz new file mode 100644 index 0000000..09cb9bc --- /dev/null +++ b/tcl8.6.13-src.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43a1fae7412f61ff11de2cfd05d28cfc3a73762f354a417c62370a54e2caf066 +size 10834396