Hi,
when there is an invalid character in the uuencoded stream, uudecode(1)
prints this error message:
uudecode: in: out: character out of range: [33-96]
Problem is that you don't know what is wrong. So I would like to
print the invalid character. As printing invalid input to the
terminal is a bad idea, I use the ascii code in decimal.
uudecode: in: out: character 10 in decimal out of range: [33-96]
ok?
bluhm
Index: usr.bin/uudecode/uudecode.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/usr.bin/uudecode/uudecode.c,v
retrieving revision 1.23
diff -u -p -r1.23 uudecode.c
--- usr.bin/uudecode/uudecode.c 3 Jan 2016 14:43:20 -0000 1.23
+++ usr.bin/uudecode/uudecode.c 29 Dec 2018 23:22:15 -0000
@@ -359,9 +359,9 @@ uu_decode(void)
#define DEC(c) (((c) - ' ') & 077) /* single character
decode */
#define IS_DEC(c) ( (((c) - ' ') >= 0) && (((c) - ' ') <= 077 + 1) )
-#define OUT_OF_RANGE do { \
- warnx("%s: %s: character out of range: [%d-%d]", \
- infile, outfile, 1 + ' ', 077 + ' ' + 1); \
+#define OUT_OF_RANGE(c) do { \
+ warnx("%s: %s: character %d in decimal out of range: [%d-%d]", \
+ infile, outfile, (c), 1 + ' ', 077 + ' ' + 1); \
return (1); \
} while (0)
@@ -374,10 +374,14 @@ uu_decode(void)
break;
for (++p; i > 0; p += 4, i -= 3)
if (i >= 3) {
- if (!(IS_DEC(*p) && IS_DEC(*(p + 1)) &&
- IS_DEC(*(p + 2)) && IS_DEC(*(p + 3))))
- OUT_OF_RANGE;
-
+ if (!IS_DEC(*p))
+ OUT_OF_RANGE(*p);
+ if (!IS_DEC(*(p + 1)))
+ OUT_OF_RANGE(*(p + 1));
+ if (!IS_DEC(*(p + 2)))
+ OUT_OF_RANGE(*(p + 2));
+ if (!IS_DEC(*(p + 3)))
+ OUT_OF_RANGE(*(p + 3));
ch = DEC(p[0]) << 2 | DEC(p[1]) >> 4;
putc(ch, outfp);
ch = DEC(p[1]) << 4 | DEC(p[2]) >> 2;
@@ -387,23 +391,26 @@ uu_decode(void)
}
else {
if (i >= 1) {
- if (!(IS_DEC(*p) && IS_DEC(*(p + 1))))
- OUT_OF_RANGE;
+ if (!IS_DEC(*p))
+ OUT_OF_RANGE(*p);
+ if (!IS_DEC(*(p + 1)))
+ OUT_OF_RANGE(*(p + 1));
ch = DEC(p[0]) << 2 | DEC(p[1]) >> 4;
putc(ch, outfp);
}
if (i >= 2) {
- if (!(IS_DEC(*(p + 1)) &&
- IS_DEC(*(p + 2))))
- OUT_OF_RANGE;
-
+ if (!IS_DEC(*(p + 1)))
+ OUT_OF_RANGE(*(p + 1));
+ if (!IS_DEC(*(p + 2)))
+ OUT_OF_RANGE(*(p + 2));
ch = DEC(p[1]) << 4 | DEC(p[2]) >> 2;
putc(ch, outfp);
}
if (i >= 3) {
- if (!(IS_DEC(*(p + 2)) &&
- IS_DEC(*(p + 3))))
- OUT_OF_RANGE;
+ if (!IS_DEC(*(p + 2)))
+ OUT_OF_RANGE(*(p + 2));
+ if (!IS_DEC(*(p + 3)))
+ OUT_OF_RANGE(*(p + 3));
ch = DEC(p[2]) << 6 | DEC(p[3]);
putc(ch, outfp);
}