diff --git a/blaze822_priv.h b/blaze822_priv.h index 5276ff7..1da4d96 100644 --- a/blaze822_priv.h +++ b/blaze822_priv.h @@ -9,5 +9,7 @@ struct message { // WSP = SP / HTAB #define iswsp(c) (((c) == ' ' || (c) == '\t')) +#define isfws(c) (((unsigned char)(c) == ' ' || (unsigned char)(c) == '\t' || (unsigned char)(c) == '\n' || (unsigned char)(c) == '\r')) + // ASCII lowercase without alpha check (wrong for "@[\]^_") #define lc(c) ((c) | 0x20) diff --git a/rfc2047.c b/rfc2047.c index 9559608..a52c612 100644 --- a/rfc2047.c +++ b/rfc2047.c @@ -75,7 +75,7 @@ blaze822_decode_b64(char *s, char *e, char **deco, size_t *decleno) *deco = buf; while (s + 4 <= e) { - while (s < e && isspace((unsigned char) *s)) + while (s < e && isfws((unsigned char) *s)) s++; if (s < e) { uint32_t v = 0; @@ -116,7 +116,7 @@ blaze822_decode_rfc2047(char *dst, char *src, size_t dlen, char *tgtenc) char *t; t = b; while (t < s) // strip space-only inbetween encoded words - if (!isspace((unsigned char) *t++)) { + if (!isfws(*t++)) { while (b < s && dlen) { *dst++ = *b++; dlen--;