diff options
author | Leah Neukirchen <leah@vuxu.org> | 2021-10-04 13:47:51 +0200 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2021-10-04 13:47:51 +0200 |
commit | b962fb6be048bc753a4131b6f690c25c5d45b3c5 (patch) | |
tree | dfa032416dd91fe191ed74bf1a99a1e889f26096 /rfc2047.c | |
parent | 958e3e08bd74e6bec3e5baee87041025fe59494d (diff) | |
download | mblaze-b962fb6be048bc753a4131b6f690c25c5d45b3c5.tar.gz mblaze-b962fb6be048bc753a4131b6f690c25c5d45b3c5.tar.xz mblaze-b962fb6be048bc753a4131b6f690c25c5d45b3c5.zip |
rfc2047: skip whitespace everywhere during base64 decoding
> The encoded output stream must be represented in lines of no more > than 76 characters each. All line breaks or other characters not > found in Table 1 must be ignored by decoding software. In base64 > data, characters other than those in Table 1, line breaks, and other > white space probably indicate a transmission error, about which a > warning message or even a message rejection might be appropriate > under some circumstances.
Diffstat (limited to 'rfc2047.c')
-rw-r--r-- | rfc2047.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/rfc2047.c b/rfc2047.c index b581976..3074b4d 100644 --- a/rfc2047.c +++ b/rfc2047.c @@ -82,16 +82,25 @@ blaze822_decode_b64(char *s, char *e, char **deco, size_t *decleno) *deco = buf; while (s + 4 <= e) { - while (s < e && isfws((unsigned char)*s)) - s++; - if (s >= e) - break; - uint32_t v = 0; unsigned char t = 0; - unsigned char c0 = s[0], c1 = s[1], c2 = s[2], c3 = s[3]; - s += 4; +#define SKIP_WS \ + while (s < e && isfws((unsigned char)*s)) \ + s++; \ + if (s >= e) \ + break; + + SKIP_WS; + unsigned char c0 = *s++; + SKIP_WS; + unsigned char c1 = *s++; + SKIP_WS; + unsigned char c2 = *s++; + SKIP_WS; + unsigned char c3 = *s++; + +#undef SKIP_WS if ((c0 | c1 | c2 | c3) > 127) goto error; |