Commit Diff


commit - 83866428de031300eab03fbb116bcf7d2b1d4f60
commit + ea4d933ed9d8ce16699c84892a29e070c70b2eb9
blob - ede7ae6cff60a8f0767820e0a62179dabbd833ad
blob + a8f8232e3539f31cc39e599ebabd2f144058e6c1
--- st.c
+++ 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;