Package: ckermit / 302-3

Metadata

Package Version Patches format
ckermit 302-3 3.0 (quilt)

Patch series

view the series file
Patch File delta Description
010_multiarch makefile.patch | (download)

makefile | 17 13 + 4 - 0 !
1 file changed, 13 insertions(+), 4 deletions(-)

 find multiarch paths in makefile
 Search multiarch directories when searching for libraries in makefile
020_fix_ptys.patch | (download)

ckupty.c | 2 2 + 0 - 0 !
1 file changed, 2 insertions(+)

 get correct ptsname() prototype
 Needed along with -DHAVE_PTMX for working ptys
030_fix_dialmessage.patch | (download)

ckuus4.c | 4 3 + 1 - 0 !
1 file changed, 3 insertions(+), 1 deletion(-)

 fix \v(dialmessage)
 Stop segfault on \v(dialmessage) when dialsta is uninitialised.
040_fix_types.patch | (download)

ckcpro.w | 19 11 + 8 - 0 !
ckuusx.c | 3 2 + 1 - 0 !
2 files changed, 13 insertions(+), 9 deletions(-)

 fix inconsistent types
 C-Kermit 9 on OpenBSD on sparc64 gets a "Bus error" and dumps core when
 receiving a file.
.
 I compiled with "-g" and determined the location of the error:
.
 [37] erb@netra:~/tmp/kermit$ gdb wermit wermit.core
 GNU gdb 6.3
 Copyright 2004 Free Software Foundation, Inc.
 GDB is free software, covered by the GNU General Public License, and you are
 welcome to change it and/or distribute copies of it under certain 
 conditions.
 Type "show copying" to see the conditions.
 There is absolutely no warranty for GDB.  Type "show warranty" for details.
 This GDB was configured as "sparc64-unknown-openbsd4.8"...
 Core was generated by `wermit'.
 Program terminated with signal 10, Bus error.
 Reading symbols from /usr/lib/libcurses.so.11.0...done.
 Loaded symbols for /usr/lib/libcurses.so.11.0
 Reading symbols from /usr/lib/libutil.so.11.1...done.
 Loaded symbols for /usr/lib/libutil.so.11.1
 Reading symbols from /usr/lib/libm.so.5.2...done.
 Loaded symbols for /usr/lib/libm.so.5.2
 Reading symbols from /usr/lib/libc.so.56.0...done.
 Loaded symbols for /usr/lib/libc.so.56.0
 Reading symbols from /usr/libexec/ld.so...done.
 Loaded symbols for /usr/libexec/ld.so
 #0  0x00000000001b15e8 in wart () at ckcpro.c:1510
 1510        if (dest == DEST_N)
 (gdb) bt
 #0  0x00000000001b15e8 in wart () at ckcpro.c:1510
 #1  0x00000000001c0f34 in xxproto () at ckcpro.c:3579
 #2  0x00000000001beaac in proto () at ckcpro.c:3141
 #3  0x0000000000105974 in doicp (threadinfo=0x0) at ckcmai.c:2420
 #4  0x000000000038840c in cc_execute (sj_buf=0xb59120, dofunc=0x1057c4 
 <doicp>, failfunc=0x10597c <failicp>) at ckusig.c:171
 #5  0x000000000010961c in main (argc=1, argv=0xfffffffffffc7ff8) at 
 ckcmai.c:3551
 (gdb) quit
 [38] erb@netra:~/tmp/kermit$
.
 That line number 1510 in ckcpro.c corresponds to line 1434 of ckcpro.w:
.
 1429     debug(F101,"<rfile>F winlo 1","",winlo);
 1430     xflg = 0;                              /* Not screen data */
 1431     if (!czseen)
 1432       cancel = 0;                  /* Reset cancellation counter */
 1433 #ifdef CALIBRATE
 1434     if (dest == DEST_N)
 1435       calibrate = 1;
 1436 #endif /* CALIBRATE */
 1437     if (!rcvfil(filnam)) {         /* Figure out local filename */
 1438    errpkt((CHAR *)rf_err);         /* Trouble */
 1439    RESUME;
.
 And that leads us to the source of the problem.  On line 155 of ckcpro.w,
 dest is declared as a long:
.
 155   extern long speed, ffc, crc16, calibrate, dest;
.
 but on line 1313 of ckcmai.c dest is declared as an int:
.
 1296 int deblog = 0,                         /* Debug log is open */
 [snip]
 1313     dest   = DEST_D,                    /* Destination for packet 
 data */
.
 In the process of checking some of the other extern declarations for
 consistency, I discovered that lint will report these errors.  The lint 
 output
 is below.  (I suppose there could also be some inconsistencies hiding behind
 #ifdef's -- I didn't investigate things that deeply.)
.
 [60] erb@netra:~/tmp/kermit$ lint *.c | grep "declared inconsistently" | 
 grep -v llib-lc
 ckcmai.c:1277: filcnt declared inconsistently (ckcpro.c:85)
 ckcmai.c:1017: calibrate declared inconsistently (ckcpro.c:177)
 ckucmd.c:309: prevcmd declared inconsistently (ckuus5.c:3103)
 ckcmai.c:636: cmdfil declared inconsistently (ckuusy.c:109)
 ckcmai.c:1313: dest declared inconsistently (ckcpro.c:177)
 ckcmai.c:1015: fsize declared inconsistently (ckcpro.c:1588)
 ckcmai.c:1274: ffc declared inconsistently (ckcpro.c:177)
 ckudia.c:293: dialcapas declared inconsistently (ckuusx.c:2364)
 ckcmai.c:1278: filrej declared inconsistently (ckcpro.c:233)
 [61] erb@netra:~/tmp/kermit$
.
 The prevcmd and cmdfil inconsistencies are character array versus character
 pointer issues and I don't know whether they're real problems or not.  The
 rest of the inconsistencies are addressed in the attached patch.
.
 The patched kermit no longer crashes when receiving files on
 openbsd/sparc64.
 I tested that the patched kermit can build and send and receive files on
 both openbsd/sparc64 and linux/x86_64 (CentOS 5).
900_ck_patch.patch | (download)

ckcmai.c | 2 1 + 1 - 0 !
1 file changed, 1 insertion(+), 1 deletion(-)

 bump ck_patch.
 As we have modified the source, set ck_patch to document this.