From: Ken Hornstein Date: Mon, 3 Mar 2014 05:42:56 +0000 (-0500) Subject: Convert unqp() to decode_qp(), and make it a public function. Also, X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/55deb9a8a3f78d67f5882d8e02bbaeab67c9078b Convert unqp() to decode_qp(), and make it a public function. Also, handle the case where decode_qp() is passed a character outside of the normal ASCII range. --- diff --git a/h/prototypes.h b/h/prototypes.h index 1ff92f64..03c783aa 100644 --- a/h/prototypes.h +++ b/h/prototypes.h @@ -46,6 +46,19 @@ void cpydgst (int, int, char *, char *); char *cpytrim (const char *); int decode_rfc2047 (char *, char *, size_t); void discard (FILE *); + +/* + * Decode two characters into their quoted-printable representation. + * + * Arguments are: + * + * byte1 - First character of Q-P representation + * byte2 - Second character of Q-P representation + * + * Returns the decoded value, -1 if the conversion failed. + */ +int decode_qp(unsigned char byte1, unsigned char byte2); + int default_done (int); /* diff --git a/sbr/fmt_rfc2047.c b/sbr/fmt_rfc2047.c index 5e5a5a8e..aa01913b 100644 --- a/sbr/fmt_rfc2047.c +++ b/sbr/fmt_rfc2047.c @@ -21,6 +21,14 @@ static signed char hexindex[] = { -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, + -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 }; @@ -37,8 +45,12 @@ static signed char index_64[128] = { #define char64(c) (((unsigned char) (c) > 127) ? -1 : index_64[(unsigned char) (c)]) -static int -unqp (unsigned char byte1, unsigned char byte2) +/* + * Decode two quoted-pair characters + */ + +int +decode_qp (unsigned char byte1, unsigned char byte2) { if (hexindex[byte1] == -1 || hexindex[byte2] == -1) return -1; @@ -234,7 +246,7 @@ decode_rfc2047 (char *str, char *dst, size_t dstlen) if (quoted_printable) { for (pp = startofmime; pp < endofmime; pp++) { if (*pp == '=') { - c = unqp (pp[1], pp[2]); + c = decode_qp (pp[1], pp[2]); if (c == -1) continue; if (c != 0)