tim@ mentioned that the databases/sqlcipher build failure with llvm13
looks like source code corruption.  x11/tkhtml also fails with garbage
in the source file.  Both ports uses Tcl to generate source files.

sthen@ has found this upstream bug report and fix:

Fix unsafe buffer lifetime
https://core.tcl-lang.org/tcl/info/24b9181478

Applying this to our lang/tcl/8.[56] ports fixes the corruption seen
in sqlcipher and tkhtml with llvm13.

OK?

Index: 8.5/Makefile
===================================================================
RCS file: /cvs/ports/lang/tcl/8.5/Makefile,v
retrieving revision 1.45
diff -u -p -r1.45 Makefile
--- 8.5/Makefile        12 Jul 2019 20:47:23 -0000      1.45
+++ 8.5/Makefile        31 Oct 2021 20:38:08 -0000
@@ -5,7 +5,7 @@ COMMENT =               Tool Command Language
 DISTNAME =             tcl8.5.19
 PKGNAME =              tcl-8.5.19
 PKGSTEM =              tcl-8.5
-REVISION =             4
+REVISION =             5
 SHARED_LIBS =          tcl85 1.8
 CATEGORIES =           lang lang/tcl
 HOMEPAGE =             http://www.tcl.tk/
Index: 8.5/patches/patch-generic_tclIO_c
===================================================================
RCS file: 8.5/patches/patch-generic_tclIO_c
diff -N 8.5/patches/patch-generic_tclIO_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 8.5/patches/patch-generic_tclIO_c   31 Oct 2021 20:38:08 -0000
@@ -0,0 +1,25 @@
+$OpenBSD$
+
+Fix unsafe buffer lifetime
+https://core.tcl-lang.org/tcl/info/24b9181478
+
+Index: generic/tclIO.c
+--- generic/tclIO.c.orig
++++ generic/tclIO.c
+@@ -3765,6 +3765,7 @@ Write(
+                               /* State info for channel */
+     char *nextNewLine = NULL;
+     int endEncoding, saved = 0, total = 0, flushed = 0, needNlFlush = 0;
++    char safe[BUFFER_PADDING];
+ 
+     if (srcLen) {
+         WillWrite(chanPtr);
+@@ -3783,7 +3784,7 @@ Write(
+ 
+     while (srcLen + saved + endEncoding > 0) {
+       ChannelBuffer *bufPtr;
+-      char *dst, safe[BUFFER_PADDING];
++      char *dst;
+       int result, srcRead, dstLen, dstWrote, srcLimit = srcLen;
+ 
+       if (nextNewLine) {
Index: 8.6/Makefile
===================================================================
RCS file: /cvs/ports/lang/tcl/8.6/Makefile,v
retrieving revision 1.23
diff -u -p -r1.23 Makefile
--- 8.6/Makefile        12 Jul 2019 20:47:23 -0000      1.23
+++ 8.6/Makefile        31 Oct 2021 20:38:08 -0000
@@ -10,7 +10,7 @@ SHARED_LIBS =         tcl86 1.${P}
 CATEGORIES =           lang lang/tcl
 HOMEPAGE =             http://www.tcl.tk/
 MAINTAINER =           Stuart Cassoff <[email protected]>
-REVISION =             2
+REVISION =             3
 
 # BSD
 PERMIT_PACKAGE =       Yes
Index: 8.6/patches/patch-generic_tclIO_c
===================================================================
RCS file: 8.6/patches/patch-generic_tclIO_c
diff -N 8.6/patches/patch-generic_tclIO_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ 8.6/patches/patch-generic_tclIO_c   31 Oct 2021 20:38:08 -0000
@@ -0,0 +1,25 @@
+$OpenBSD$
+
+Fix unsafe buffer lifetime
+https://core.tcl-lang.org/tcl/info/24b9181478
+
+Index: generic/tclIO.c
+--- generic/tclIO.c.orig
++++ generic/tclIO.c
+@@ -4242,6 +4242,7 @@ Write(
+                               /* State info for channel */
+     char *nextNewLine = NULL;
+     int endEncoding, saved = 0, total = 0, flushed = 0, needNlFlush = 0;
++    char safe[BUFFER_PADDING];
+ 
+     if (srcLen) {
+         WillWrite(chanPtr);
+@@ -4260,7 +4261,7 @@ Write(
+ 
+     while (srcLen + saved + endEncoding > 0) {
+       ChannelBuffer *bufPtr;
+-      char *dst, safe[BUFFER_PADDING];
++      char *dst;
+       int result, srcRead, dstLen, dstWrote, srcLimit = srcLen;
+ 
+       if (nextNewLine) {
-- 
Christian "naddy" Weisgerber                          [email protected]

Reply via email to