lang/tcl85: fix integer overflow and avoid segfault

PR:		214205
Submitted by:	gahr
This commit is contained in:
Pietro Cerutti 2016-11-04 15:15:36 +00:00
parent 4d9192e0f7
commit 315efbe78f
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=425331
2 changed files with 47 additions and 0 deletions

View File

@ -3,6 +3,7 @@
PORTNAME= tcl
PORTVERSION= 8.5.19
PORTREVISION= 1
CATEGORIES= lang
MASTER_SITES= TCLTK/tcl8_5 \
SF/tcl/Tcl/${PORTVERSION}

View File

@ -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) {