diff options
| -rw-r--r-- | st.c | 6 |
1 files changed, 5 insertions, 1 deletions
| @@ -366,7 +366,7 @@ char | |||
| 366 | base64dec_getc(const char **src) | 366 | base64dec_getc(const char **src) |
| 367 | { | 367 | { |
| 368 | while (**src && !isprint(**src)) (*src)++; | 368 | while (**src && !isprint(**src)) (*src)++; |
| 369 | return *((*src)++); | 369 | return **src ? *((*src)++) : '='; /* emulate padding if string ends */ |
| 370 | } | 370 | } |
| 371 | 371 | ||
| 372 | char * | 372 | char * |
| @@ -384,6 +384,10 @@ base64dec(const char *src) | |||
| 384 | int c = base64_digits[(unsigned char) base64dec_getc(&src)]; | 384 | int c = base64_digits[(unsigned char) base64dec_getc(&src)]; |
| 385 | int d = base64_digits[(unsigned char) base64dec_getc(&src)]; | 385 | int d = base64_digits[(unsigned char) base64dec_getc(&src)]; |
| 386 | 386 | ||
| 387 | /* invalid input. 'a' can be -1, e.g. if src is "\n" (c-str) */ | ||
| 388 | if (a == -1 || b == -1) | ||
| 389 | break; | ||
| 390 | |||
| 387 | *dst++ = (a << 2) | ((b & 0x30) >> 4); | 391 | *dst++ = (a << 2) | ((b & 0x30) >> 4); |
| 388 | if (c == -1) | 392 | if (c == -1) |
| 389 | break; | 393 | break; |
