X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=st.c;h=50226d1677b230d290d9e802742e85f27dc1d4b4;hb=7ceb3d1f72eabfa678e5cfae176c57630ad98c43;hp=ede7ae6cff60a8f0767820e0a62179dabbd833ad;hpb=f1546cf9c1f9fc52d26dbbcf73210901e83c7ecf;p=st.git diff --git a/st.c b/st.c index ede7ae6..50226d1 100644 --- a/st.c +++ b/st.c @@ -366,7 +366,7 @@ char base64dec_getc(const char **src) { while (**src && !isprint(**src)) (*src)++; - return *((*src)++); + return **src ? *((*src)++) : '='; /* emulate padding if string ends */ } char * @@ -384,6 +384,10 @@ base64dec(const char *src) int c = base64_digits[(unsigned char) base64dec_getc(&src)]; int d = base64_digits[(unsigned char) base64dec_getc(&src)]; + /* invalid input. 'a' can be -1, e.g. if src is "\n" (c-str) */ + if (a == -1 || b == -1) + break; + *dst++ = (a << 2) | ((b & 0x30) >> 4); if (c == -1) break; @@ -2326,7 +2330,7 @@ tputc(Rune u) if (term.esc&ESC_DCS && strescseq.len == 0 && u == 'q') term.mode |= MODE_SIXEL; - if (strescseq.len+len >= sizeof(strescseq.buf)-1) { + if (strescseq.len+len >= sizeof(strescseq.buf)) { /* * Here is a bug in terminals. If the user never sends * some code to stop the str or esc command, then st