The following reply was made to PR other/3411; it has been noted by GNATS.
From: "Life is hard, and then you die." <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED], [EMAIL PROTECTED]
Cc: Subject: Re: other/3411: [PATCH] ap_uuencode() has number of bugs
Date: Fri, 20 Nov 1998 10:21:58 +0100 (MET)
Oops, just realized a bug in the EBCDIC part of the patch - os_toebcdic[]
isn't necessary because basis_64[] is already appropriate. So here is
the patch again:
--- main/util.c.orig Fri Nov 6 18:12:27 1998
+++ main/util.c Wed Nov 18 20:03:40 1998
@@ -1749,18 +1749,44 @@
{
int i, len = strlen(string);
char *p;
- char *encoded = (char *) ap_pcalloc(a, (len+2) / 3 * 4);
+ char *encoded = (char *) ap_palloc(a, (len+2) / 3 * 4);
p = encoded;
- for (i = 0; i < len; i += 3) {
- *p++ = basis_64[string[i] >> 2];
+#ifndef CHARSET_EBCDIC
+ for (i = 0; i < len-2; i += 3) {
+ *p++ = basis_64[(string[i] >> 2) & 0x3F];
*p++ = basis_64[((string[i] & 0x3) << 4) | ((int) (string[i + 1] &
0xF0) >> 4)];
*p++ = basis_64[((string[i + 1] & 0xF) << 2) | ((int) (string[i + 2]
& 0xC0) >> 6)];
*p++ = basis_64[string[i + 2] & 0x3F];
}
- *p-- = '\0';
- *p-- = '=';
- *p-- = '=';
+ if (i < len) {
+ *p++ = basis_64[(string[i] >> 2) & 0x3F];
+ *p++ = basis_64[((string[i] & 0x3) << 4) | ((int) (string[i + 1] &
0xF0) >> 4)];
+ if (i == (len-2))
+ *p++ = basis_64[((string[i + 1] & 0xF) << 2)];
+ else
+ *p++ = '=';
+ *p++ = '=';
+ }
+#else /*CHARSET_EBCDIC*/
+ for (i = 0; i < len-2; i += 3) {
+ *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F];
+ *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4) | ((int)
(os_toascii[string[i + 1]] & 0xF0) >> 4)];
+ *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2) | ((int)
(os_toascii[string[i + 2]] & 0xC0) >> 6)];
+ *p++ = basis_64[os_toascii[string[i + 2]] & 0x3F];
+ }
+ if (i < len) {
+ *p++ = basis_64[(os_toascii[string[i]] >> 2) & 0x3F];
+ *p++ = basis_64[((os_toascii[string[i]] & 0x3) << 4) | ((int)
(os_toascii[string[i + 1]] & 0xF0) >> 4)];
+ if (i == (len-2))
+ *p++ = basis_64[((os_toascii[string[i + 1]] & 0xF) << 2)];
+ else
+ *p++ = '=';
+ *p++ = '=';
+ }
+#endif /*CHARSET_EBCDIC*/
+
+ *p = '\0';
return encoded;
}