Merge pull request #3992 from embhorn/zd12169

Allow parsing spaces in Base64_SkipNewline
This commit is contained in:
John Safranek 2021-05-07 14:30:24 -07:00 committed by GitHub
commit e247161b2e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 11 deletions

View File

@ -117,23 +117,31 @@ static WC_INLINE int Base64_SkipNewline(const byte* in, word32 *inLen, word32 *o
{
word32 len = *inLen;
word32 j = *outJ;
if (len && (in[j] == ' ' || in[j] == '\r' || in[j] == '\n')) {
byte endLine = in[j++];
byte curChar = in[j];
while (len && curChar == ' ') {
/* skip whitespace in the middle or end of line */
curChar = in[++j];
len--;
while (len && endLine == ' ') { /* allow trailing whitespace */
endLine = in[j++];
len--;
}
if (endLine == '\r') {
}
if (len && (curChar == '\r' || curChar == '\n')) {
j++;
len--;
if (curChar == '\r') {
if (len) {
endLine = in[j++];
curChar = in[j++];
len--;
}
}
if (endLine != '\n') {
if (curChar != '\n') {
WOLFSSL_MSG("Bad end of line in Base64 Decode");
return ASN_INPUT_E;
}
curChar = in[j];
}
while (len && curChar == ' ') {
/* skip whitespace at beginning of line */
curChar = in[++j];
len--;
}
if (!len) {
return BUFFER_E;

View File

@ -1652,6 +1652,7 @@ WOLFSSL_TEST_SUBROUTINE int base64_test(void)
int ret;
WOLFSSL_SMALL_STACK_STATIC const byte good[] = "A+Gd\0\0\0";
WOLFSSL_SMALL_STACK_STATIC const byte goodEnd[] = "A+Gd \r\n";
WOLFSSL_SMALL_STACK_STATIC const byte good_spaces[] = " A + G d \0";
byte out[128];
word32 outLen;
#ifdef WOLFSSL_BASE64_ENCODE
@ -1660,9 +1661,9 @@ WOLFSSL_TEST_SUBROUTINE int base64_test(void)
byte longData[79] = { 0 };
WOLFSSL_SMALL_STACK_STATIC const byte symbols[] = "+/A=";
#endif
WOLFSSL_SMALL_STACK_STATIC const byte badSmall[] = "AAA Gdj=";
WOLFSSL_SMALL_STACK_STATIC const byte badSmall[] = "AAA!Gdj=";
WOLFSSL_SMALL_STACK_STATIC const byte badLarge[] = "AAA~Gdj=";
WOLFSSL_SMALL_STACK_STATIC const byte badEOL[] = "A+Gd AA";
WOLFSSL_SMALL_STACK_STATIC const byte badEOL[] = "A+Gd!AA";
WOLFSSL_SMALL_STACK_STATIC const byte badPadding[] = "AA=A";
WOLFSSL_SMALL_STACK_STATIC const byte badChar[] = ",-.:;<=>?@[\\]^_`";
byte goodChar[] =
@ -1687,6 +1688,10 @@ WOLFSSL_TEST_SUBROUTINE int base64_test(void)
return -1235;
if (outLen != 64 / 4 * 3)
return -1236;
outLen = sizeof(out);
ret = Base64_Decode(good_spaces, sizeof(good_spaces), out, &outLen);
if (ret != 0)
return -1201;
/* Bad parameters. */
outLen = 1;