From fb366f063efb45e1c61b12265e8ce693fcbcff95 Mon Sep 17 00:00:00 2001 From: Guido Vranken Date: Wed, 9 Jun 2021 19:16:07 +0200 Subject: [PATCH 1/2] Additional length check improvements in Base64_SkipNewline --- wolfcrypt/src/coding.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/wolfcrypt/src/coding.c b/wolfcrypt/src/coding.c index 1b6bd5795..a35fd4356 100644 --- a/wolfcrypt/src/coding.c +++ b/wolfcrypt/src/coding.c @@ -117,10 +117,18 @@ static WC_INLINE int Base64_SkipNewline(const byte* in, word32 *inLen, word32 *o { word32 len = *inLen; word32 j = *outJ; - byte curChar = in[j]; + byte curChar; + + if (len == 0) { + return BUFFER_E; + } + + curChar = in[j++]; + len--; + while (len && curChar == ' ') { /* skip whitespace in the middle or end of line */ - curChar = in[++j]; + curChar = in[j++]; len--; } if (len && (curChar == '\r' || curChar == '\n')) { From 220bfe9926852df2c89066ba4cc4d07e82e3c0ec Mon Sep 17 00:00:00 2001 From: Guido Vranken Date: Mon, 14 Jun 2021 03:42:41 +0200 Subject: [PATCH 2/2] Fix Base64_SkipNewline such that tests pass --- wolfcrypt/src/coding.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/wolfcrypt/src/coding.c b/wolfcrypt/src/coding.c index a35fd4356..18ef90752 100644 --- a/wolfcrypt/src/coding.c +++ b/wolfcrypt/src/coding.c @@ -122,13 +122,11 @@ static WC_INLINE int Base64_SkipNewline(const byte* in, word32 *inLen, word32 *o if (len == 0) { return BUFFER_E; } + curChar = in[j]; - curChar = in[j++]; - len--; - - while (len && curChar == ' ') { + while (len > 1 && curChar == ' ') { /* skip whitespace in the middle or end of line */ - curChar = in[j++]; + curChar = in[++j]; len--; } if (len && (curChar == '\r' || curChar == '\n')) {