Hi, Decoding using the -lf option on powerpc made ish freeze. A looped fgetc(3) call never reached EOF, since the return value was stored as a char, that is unsigned on powerpc and arm*, instead of int.
--8<-- $ cd /tmp && cp /bin/ls . $ ish -ss ls $ rm ls $ ish -lf ls.ish [...] < Restore from ls.ish > <<< ls for UNIX ( use shift_jis ) 2021/07/24 11:55:40 357460 byte >>> ls : Error!! File delete. <<< ls for UNIX ( use shift_jis ) 2021/07/24 11:55:40 357460 byte >>> ls : ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo Finished. [infinite loop] -->8-- With the below diff, ish properly quits once the decoding has been done, and the decoded ls works. Tested on amd64 and macppc. OK? Charlène. Index: Makefile =================================================================== RCS file: /cvs/ports/converters/ish/Makefile,v retrieving revision 1.24 diff -u -p -u -p -r1.24 Makefile --- Makefile 14 Jul 2019 02:16:51 -0000 1.24 +++ Makefile 24 Jul 2021 08:31:46 -0000 @@ -4,6 +4,7 @@ COMMENT= binary-to-text file converter DISTNAME= ish201a5 PKGNAME= ish-2.01a5 +REVISION= 0 CATEGORIES= converters PERMIT_PACKAGE= no license Index: patches/patch-decode_c =================================================================== RCS file: /cvs/ports/converters/ish/patches/patch-decode_c,v retrieving revision 1.1 diff -u -p -u -p -r1.1 patch-decode_c --- patches/patch-decode_c 30 Dec 2011 23:14:34 -0000 1.1 +++ patches/patch-decode_c 24 Jul 2021 08:31:46 -0000 @@ -1,9 +1,11 @@ $OpenBSD: patch-decode_c,v 1.1 2011/12/30 23:14:34 sthen Exp $ -Fix: When decoding, the status display has Y2K problem. +Hunk #1: When decoding, the status display has Y2K problem. +Hunk #2: fix an infinite loop on unsigned char archs (powerpc and arm*) ---- decode.c.orig Sun Jan 7 10:46:37 1996 -+++ decode.c Fri Dec 30 23:09:44 2011 +Index: decode.c +--- decode.c.orig ++++ decode.c @@ -273,8 +273,8 @@ ish_head *head; tm.tm_min = (p[1]&0x07)<<3; tm.tm_min += p[0]>>5; @@ -15,3 +17,13 @@ Fix: When decoding, the status display h #ifdef __TURBOC__ memcpy( &timep[0], head->time, 4); timep[1] = timep[0]; +@@ -675,8 +675,7 @@ FILE *ipath; + int maxlen; + char *buff; + { +- int i,j; +- char c; ++ int c,i,j; + + if((decok & 0x80) == 0) + j=78;