X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=st.c;h=7c7ddffd7b7c53cb976f1e2521d453e415ef471a;hb=b1338e91ed632adbcd08388de37e46cf25326e01;hp=d7bd32ae7606c2f46fe26e77377863e06b62ae16;hpb=e7ed326d2e914a57017c9f34459824614075519b;p=st.git diff --git a/st.c b/st.c index d7bd32a..7c7ddff 100644 --- a/st.c +++ b/st.c @@ -386,6 +386,13 @@ static const char base64_digits[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +char +base64dec_getc(const char **src) +{ + while (**src && !isprint(**src)) (*src)++; + return *((*src)++); +} + char * base64dec(const char *src) { @@ -393,13 +400,13 @@ base64dec(const char *src) char *result, *dst; if (in_len % 4) - return NULL; + in_len += 4 - (in_len % 4); result = dst = xmalloc(in_len / 4 * 3 + 1); while (*src) { - int a = base64_digits[(unsigned char) *src++]; - int b = base64_digits[(unsigned char) *src++]; - int c = base64_digits[(unsigned char) *src++]; - int d = base64_digits[(unsigned char) *src++]; + int a = base64_digits[(unsigned char) base64dec_getc(&src)]; + int b = base64_digits[(unsigned char) base64dec_getc(&src)]; + int c = base64_digits[(unsigned char) base64dec_getc(&src)]; + int d = base64_digits[(unsigned char) base64dec_getc(&src)]; *dst++ = (a << 2) | ((b & 0x30) >> 4); if (c == -1) @@ -2537,7 +2544,7 @@ tresize(int col, int row) } /* allocate any new rows */ - for (/* i == minrow */; i < row; i++) { + for (/* i = minrow */; i < row; i++) { term.line[i] = xmalloc(col * sizeof(Glyph)); term.alt[i] = xmalloc(col * sizeof(Glyph)); }