size_t outl = 0;
size_t leftover = 0;
+repeat:
switch (leftover) {
for (;;) {
case 0:
break;
}
if ((q = base64_table_dec[*c++]) >= 254) {
-
+ ret = 0;
break;
}
carry = q << 2;
break;
}
if ((q = base64_table_dec[*c++]) >= 254) {
- return (-1);
+ ret = 0;
+ break;
}
*o++ = carry | (q >> 4);
carry = q << 4;
}
}
+ if (!ret && inlen > 0) {
+ /* Skip to the next valid character in input */
+ while (base64_table_dec[*c] >= 254 && inlen > 0) {
+ c ++;
+ inlen --;
+ }
+
+ if (inlen > 0) {
+ goto repeat;
+ }
+ }
+
*outlen = outl;
return ret;