src: fix base64 decoding
Make sure trailing garbage is not treated as a valid base64 character. Fixes: https://github.com/nodejs/node/issues/11987 PR-URL: https://github.com/nodejs/node/pull/11995 Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
7c0079f1be
commit
7e0c3ab641
@ -60,13 +60,13 @@ size_t base64_decode_slow(char* dst, size_t dstlen,
|
||||
size_t k = 0;
|
||||
for (;;) {
|
||||
#define V(expr) \
|
||||
while (i < srclen) { \
|
||||
for (;;) { \
|
||||
const uint8_t c = src[i]; \
|
||||
lo = unbase64(c); \
|
||||
i += 1; \
|
||||
if (lo < 64) \
|
||||
break; /* Legal character. */ \
|
||||
if (c == '=') \
|
||||
if (c == '=' || i >= srclen) \
|
||||
return k; \
|
||||
} \
|
||||
expr; \
|
||||
|
@ -464,6 +464,10 @@ assert.strictEqual(
|
||||
// Regression test for https://github.com/nodejs/node/issues/3496.
|
||||
assert.strictEqual(Buffer.from('=bad'.repeat(1e4), 'base64').length, 0);
|
||||
|
||||
// Regression test for https://github.com/nodejs/node/issues/11987.
|
||||
assert.deepStrictEqual(Buffer.from('w0 ', 'base64'),
|
||||
Buffer.from('w0', 'base64'));
|
||||
|
||||
{
|
||||
// Creating buffers larger than pool size.
|
||||
const l = Buffer.poolSize + 5;
|
||||
|
Loading…
x
Reference in New Issue
Block a user