]> diplodocus.org Git - nmh/commitdiff
Convert unqp() to decode_qp(), and make it a public function. Also,
authorKen Hornstein <kenh@pobox.com>
Mon, 3 Mar 2014 05:42:56 +0000 (00:42 -0500)
committerKen Hornstein <kenh@pobox.com>
Mon, 3 Mar 2014 05:42:56 +0000 (00:42 -0500)
handle the case where decode_qp() is passed a character outside of
the normal ASCII range.

h/prototypes.h
sbr/fmt_rfc2047.c

index 1ff92f6..03c783a 100644 (file)
@@ -46,6 +46,19 @@ void cpydgst (int, int, char *, char *);
 char *cpytrim (const char *);
 int decode_rfc2047 (char *, char *, size_t);
 void discard (FILE *);
 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);
 
 /*
 int default_done (int);
 
 /*
index 5e5a5a8..aa01913 100644 (file)
@@ -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,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
 };
 
     -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)])
 
 
 #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;
 {
     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 == '=') {
            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)
                        if (c == -1)
                            continue;
                        if (c != 0)