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;

Reply via email to