b64decode correct decode of some strings
authorAndy Green <andy@warmcat.com>
Fri, 18 Mar 2016 23:48:24 +0000 (07:48 +0800)
committerAndy Green <andy@warmcat.com>
Fri, 18 Mar 2016 23:48:24 +0000 (07:48 +0800)
https://github.com/warmcat/libwebsockets/issues/467

Signed-off-by: Andy Green <andy@warmcat.com>
lib/base64-decode.c

index 3309b44..4dfce67 100644 (file)
@@ -99,7 +99,7 @@ LWS_VISIBLE int
 lws_b64_decode_string(const char *in, char *out, int out_size)
 {
        int len;
-       int i;
+       int i, c;
        int done = 0;
        unsigned char v;
        unsigned char quad[4];
@@ -110,19 +110,19 @@ lws_b64_decode_string(const char *in, char *out, int out_size)
                for (i = 0; i < 4 && *in; i++) {
 
                        v = 0;
+                       c = 0;
                        while (*in && !v) {
-
-                               v = *in++;
+                               c = v = *in++;
                                v = (v < 43 || v > 122) ? 0 : decode[v - 43];
                                if (v)
                                        v = (v == '$') ? 0 : v - 61;
-                               if (*in) {
-                                       len++;
-                                       if (v)
-                                               quad[i] = v - 1;
-                               } else
-                                       quad[i] = 0;
                        }
+                       if (c) {
+                               len++;
+                               if (v)
+                                       quad[i] = v - 1;
+                       } else
+                               quad[i] = 0;
                }
 
                if (out_size < (done + len - 1))
@@ -147,6 +147,7 @@ lws_b64_decode_string(const char *in, char *out, int out_size)
        return done;
 }
 
+#if 0
 int
 lws_b64_selftest(void)
 {
@@ -183,3 +184,4 @@ lws_b64_selftest(void)
 
        return 0;
 }
+#endif