I found one more crash in expect (I exercise it TONS),
it seems it could only be the one I changed to memmove
in the below patch.
FWIW, I've never received a mail from Don Libes of nist.gov
in regards to my first memcpy->memmove patch from 6 or so
months ago, not sure if I ever will :(
I've been running with this patch for a couple weeks now at
least with no further issues.
Cheers,
--Ryan
backtrace:
Core was generated by `expect'.
Program terminated with signal 6, Aborted.
(no debugging symbols found)
Loaded symbols for /usr/local/bin/expect
Reading symbols from /usr/local/lib/libexpect545.so.0.0...(no debugging symbols
found)...done.
Loaded symbols for /usr/local/lib/libexpect545.so.0.0
Reading symbols from /usr/local/lib/libtcl85.so.1.7...(no debugging symbols
found)...done.
Loaded symbols for /usr/local/lib/libtcl85.so.1.7
Reading symbols from /usr/lib/libm.so.9.0...done.
Loaded symbols for /usr/lib/libm.so.9.0
Reading symbols from /usr/lib/libutil.so.12.1...done.
Loaded symbols for /usr/lib/libutil.so.12.1
Reading symbols from /usr/lib/libc.so.80.1...done.
Loaded symbols for /usr/lib/libc.so.80.1
Reading symbols from /usr/libexec/ld.so...done.
Loaded symbols for /usr/libexec/ld.so
Reading symbols from /usr/local/lib/tcl/pgtcl/libpgtcl17.so.0.0...done.
Loaded symbols for /usr/local/lib/tcl/pgtcl/libpgtcl17.so.0.0
Reading symbols from /usr/local/lib/libpq.so.5.7...done.
Loaded symbols for /usr/local/lib/libpq.so.5.7
Reading symbols from /usr/lib/libssl.so.35.0...done.
Loaded symbols for /usr/lib/libssl.so.35.0
Reading symbols from /usr/lib/libcrypto.so.35.0...done.
Loaded symbols for /usr/lib/libcrypto.so.35.0
#0 0x00000e9f17e0c90a in kill () at <stdin>:2
2 <stdin>: No such file or directory.
in <stdin>
(gdb) bt
#0 0x00000e9f17e0c90a in kill () at <stdin>:2
#1 0x00000e9f17e46b19 in abort () at /usr/src/lib/libc/stdlib/abort.c:53
#2 0x00000e9f17e1dde8 in memcpy (dst0=0xf525d, src0=0x6, length=0)
at /usr/src/lib/libc/string/memcpy.c:65
#3 0x00000e9e99e00a37 in Exp_InteractObjCmd ()
from /usr/local/lib/libexpect545.so.0.0
#4 0x00000e9f5eb4ec5b in TclEvalObjvInternal ()
from /usr/local/lib/libtcl85.so.1.7
#5 0x00000e9f5eb9782d in TclExecuteByteCode ()
from /usr/local/lib/libtcl85.so.1.7
#6 0x00000e9f5eb9e17f in TclCompEvalObj () from /usr/local/lib/libtcl85.so.1.7
#7 0x00000e9f5eb5004b in TclEvalObjEx () from /usr/local/lib/libtcl85.so.1.7
#8 0x00000e9e99dfc75b in expMatchProcess ()
from /usr/local/lib/libexpect545.so.0.0
#9 0x00000e9e99dfd605 in Exp_ExpectObjCmd ()
from /usr/local/lib/libexpect545.so.0.0
#10 0x00000e9f5eb4ec5b in TclEvalObjvInternal ()
from /usr/local/lib/libtcl85.so.1.7
#11 0x00000e9f5eb9782d in TclExecuteByteCode ()
from /usr/local/lib/libtcl85.so.1.7
#12 0x00000e9f5ebd84ab in TclObjInterpProcCore ()
from /usr/local/lib/libtcl85.so.1.7
#13 0x00000e9f5eb4ec5b in TclEvalObjvInternal ()
from /usr/local/lib/libtcl85.so.1.7
---Type <return> to continue, or q <return> to quit---
#14 0x00000e9f5eb9782d in TclExecuteByteCode ()
from /usr/local/lib/libtcl85.so.1.7
#15 0x00000e9f5ebd84ab in TclObjInterpProcCore ()
from /usr/local/lib/libtcl85.so.1.7
#16 0x00000e9f5eb4ec5b in TclEvalObjvInternal ()
from /usr/local/lib/libtcl85.so.1.7
#17 0x00000e9f5eb9782d in TclExecuteByteCode ()
from /usr/local/lib/libtcl85.so.1.7
#18 0x00000e9f5ebd84ab in TclObjInterpProcCore ()
from /usr/local/lib/libtcl85.so.1.7
#19 0x00000e9f5eb4ec5b in TclEvalObjvInternal ()
from /usr/local/lib/libtcl85.so.1.7
#20 0x00000e9f5eb9782d in TclExecuteByteCode ()
from /usr/local/lib/libtcl85.so.1.7
#21 0x00000e9f5eb9e17f in TclCompEvalObj () from /usr/local/lib/libtcl85.so.1.7
#22 0x00000e9f5eb5004b in TclEvalObjEx () from /usr/local/lib/libtcl85.so.1.7
#23 0x00000e9e99dfc75b in expMatchProcess ()
from /usr/local/lib/libexpect545.so.0.0
#24 0x00000e9e99dfd605 in Exp_ExpectObjCmd ()
from /usr/local/lib/libexpect545.so.0.0
#25 0x00000e9f5eb4ec5b in TclEvalObjvInternal ()
from /usr/local/lib/libtcl85.so.1.7
#26 0x00000e9f5eb9782d in TclExecuteByteCode ()
from /usr/local/lib/libtcl85.so.1.7
---Type <return> to continue, or q <return> to quit---
#27 0x00000e9f5ebd84ab in TclObjInterpProcCore ()
from /usr/local/lib/libtcl85.so.1.7
#28 0x00000e9f5eb4ec5b in TclEvalObjvInternal ()
from /usr/local/lib/libtcl85.so.1.7
#29 0x00000e9f5eb9782d in TclExecuteByteCode ()
from /usr/local/lib/libtcl85.so.1.7
#30 0x00000e9f5ebd84ab in TclObjInterpProcCore ()
from /usr/local/lib/libtcl85.so.1.7
#31 0x00000e9f5eb4ec5b in TclEvalObjvInternal ()
from /usr/local/lib/libtcl85.so.1.7
#32 0x00000e9f5eb4f8c5 in TclEvalEx () from /usr/local/lib/libtcl85.so.1.7
#33 0x00000e9f5eb4fc66 in Tcl_EvalEx () from /usr/local/lib/libtcl85.so.1.7
#34 0x00000e9f5ebbb11d in Tcl_FSEvalFileEx ()
from /usr/local/lib/libtcl85.so.1.7
#35 0x00000e9f5ebbb28f in Tcl_EvalFile () from /usr/local/lib/libtcl85.so.1.7
#36 0x00000e9e99e040eb in exp_interpret_rcfiles ()
from /usr/local/lib/libexpect545.so.0.0
#37 0x0000000000000000 in ?? ()
Current language: auto; currently asm
(gdb)
patch:
Index: patches/patch-exp_inter_c
===================================================================
RCS file: /cvs/ports/lang/expect/patches/patch-exp_inter_c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-exp_inter_c
--- patches/patch-exp_inter_c 2 Apr 2015 17:46:57 -0000 1.1
+++ patches/patch-exp_inter_c 3 Dec 2015 00:17:30 -0000
@@ -1,6 +1,15 @@
$OpenBSD: patch-exp_inter_c,v 1.1 2015/04/02 17:46:57 sebastia Exp $
--- exp_inter.c.orig Tue Aug 31 15:20:27 2010
-+++ exp_inter.c Wed Apr 1 15:46:05 2015
++++ exp_inter.c Tue Nov 17 10:45:17 2015
+@@ -1564,7 +1564,7 @@ Exp_InteractObjCmd(
+ ustring = u->input.buffer;
+ if (skip) {
+ size -= skip;
+- memcpy(ustring, ustring + skip, size * sizeof(Tcl_UniChar));
++ memmove(ustring, ustring + skip, size * sizeof(Tcl_UniChar));
+ }
+ }
+ u->input.use = size;
@@ -1824,12 +1824,12 @@ got_action:
skip += matchLen;
size -= skip;