summaryrefslogtreecommitdiff
path: root/chat/icb/patches
diff options
context:
space:
mode:
authoritojun <itojun>2001-02-12 00:53:12 +0000
committeritojun <itojun>2001-02-12 00:53:12 +0000
commitf074b45ff5d664ee6751b8b1698ce5ae43d638b7 (patch)
treeb9d16d1b34cc30494d0143d62c74e2ae6911a0ed /chat/icb/patches
parentc7094417927cc6d53551b501bd46b3f3850d120c (diff)
downloadpkgsrc-f074b45ff5d664ee6751b8b1698ce5ae43d638b7.tar.gz
do not reference freed memory region. found by mallof.conf=AJ
Diffstat (limited to 'chat/icb/patches')
-rw-r--r--chat/icb/patches/patch-at40
1 files changed, 40 insertions, 0 deletions
diff --git a/chat/icb/patches/patch-at b/chat/icb/patches/patch-at
new file mode 100644
index 00000000000..8e2d0b608eb
--- /dev/null
+++ b/chat/icb/patches/patch-at
@@ -0,0 +1,40 @@
+$NetBSD: patch-at,v 1.1 2001/02/12 00:53:14 itojun Exp $
+
+--- tcl/tclProc.c- Mon Feb 12 09:46:23 2001
++++ tcl/tclProc.c Mon Feb 12 09:49:35 2001
+@@ -690,7 +690,7 @@
+ char **argv; /* Argument values. */
+ {
+ char **args;
+- register Var *formalPtr, *argPtr;
++ register Var *formalPtr, *argPtr, *nextPtr;
+ register Interp *iPtr = (Interp *) interp;
+ CallFrame frame;
+ char *value, *end;
+@@ -700,6 +700,7 @@
+ * Set up a call frame for the new procedure invocation.
+ */
+
++ memset(&frame, 0, sizeof(frame));
+ iPtr = procPtr->iPtr;
+ frame.varPtr = NULL;
+ if (iPtr->varFramePtr != NULL) {
+@@ -793,7 +794,8 @@
+ */
+
+ procDone:
+- for (argPtr = frame.varPtr; argPtr != NULL; argPtr = argPtr->nextPtr) {
++ for (argPtr = frame.varPtr; argPtr != NULL; argPtr = nextPtr) {
++ nextPtr = argPtr->nextPtr;
+ if (argPtr->flags & VAR_DYNAMIC) {
+ free(argPtr->value);
+ }
+@@ -919,7 +921,7 @@
+ if (valueLength < 20) {
+ valueLength = 20;
+ }
+- varPtr = (Var *) malloc(VAR_SIZE(nameLength, valueLength));
++ varPtr = (Var *) calloc(1, VAR_SIZE(nameLength, valueLength));
+ strcpy(varPtr->name, name);
+ varPtr->value = varPtr->name + nameLength + 1;
+ strcpy(varPtr->value, value);