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 ! |
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 ! |
get correct ptsname() prototype Needed along with -DHAVE_PTMX for working ptys |
| 030_fix_dialmessage.patch | (download) |
ckuus4.c |
4 3 + 1 - 0 ! |
fix \v(dialmessage) Stop segfault on \v(dialmessage) when dialsta is uninitialised. |
| 040_fix_types.patch | (download) |
ckcpro.w |
19 11 + 8 - 0 ! |
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 ! |
bump ck_patch. As we have modified the source, set ck_patch to document this. |
1
