svn commit: r425331 - in head/lang/tcl85: . files
Pietro Cerutti
gahr at FreeBSD.org
Fri Nov 4 15:15:37 UTC 2016
Author: gahr
Date: Fri Nov 4 15:15:36 2016
New Revision: 425331
URL: https://svnweb.freebsd.org/changeset/ports/425331
Log:
lang/tcl85: fix integer overflow and avoid segfault
PR: 214205
Submitted by: gahr
Added:
head/lang/tcl85/files/patch-bug214205 (contents, props changed)
Modified:
head/lang/tcl85/Makefile
Modified: head/lang/tcl85/Makefile
==============================================================================
--- head/lang/tcl85/Makefile Fri Nov 4 15:12:28 2016 (r425330)
+++ head/lang/tcl85/Makefile Fri Nov 4 15:15:36 2016 (r425331)
@@ -3,6 +3,7 @@
PORTNAME= tcl
PORTVERSION= 8.5.19
+PORTREVISION= 1
CATEGORIES= lang
MASTER_SITES= TCLTK/tcl8_5 \
SF/tcl/Tcl/${PORTVERSION}
Added: head/lang/tcl85/files/patch-bug214205
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/lang/tcl85/files/patch-bug214205 Fri Nov 4 15:15:36 2016 (r425331)
@@ -0,0 +1,46 @@
+Index: ../generic/tclListObj.c
+==================================================================
+--- ../generic/tclListObj.c
++++ ../generic/tclListObj.c
+@@ -853,12 +853,15 @@
+ */
+ count = numElems - first;
+ }
+
+ if (objc > LIST_MAX - (numElems - count)) {
+- Tcl_SetObjResult(interp, Tcl_ObjPrintf(
+- "max length of a Tcl list (%d elements) exceeded", LIST_MAX));
++ if (interp != NULL) {
++ Tcl_SetObjResult(interp, Tcl_ObjPrintf(
++ "max length of a Tcl list (%d elements) exceeded",
++ LIST_MAX));
++ }
+ return TCL_ERROR;
+ }
+ isShared = (listRepPtr->refCount > 1);
+ numRequired = numElems - count + objc; /* Known <= LIST_MAX */
+
+
+Index: ../generic/tclListObj.c
+==================================================================
+--- ../generic/tclListObj.c
++++ ../generic/tclListObj.c
+@@ -844,15 +844,12 @@
+ if (first >= numElems) {
+ first = numElems; /* So we'll insert after last element. */
+ }
+ if (count < 0) {
+ count = 0;
+- } else if (numElems < first+count || first+count < 0) {
+- /*
+- * The 'first+count < 0' condition here guards agains integer
+- * overflow in determining 'first+count'
+- */
++ } else if (first > INT_MAX - count /* Handle integer overflow */
++ || numElems < first+count) {
+ count = numElems - first;
+ }
+
+ if (objc > LIST_MAX - (numElems - count)) {
+ if (interp != NULL) {
+
More information about the svn-ports-all
mailing list