]> zoso.dev Git - buffer.git/commitdiff
Treat `=` as end of Base64 encoded string
authorVolker Mische <volker.mische@gmail.com>
Thu, 18 Jan 2018 23:39:03 +0000 (00:39 +0100)
committerVolker Mische <volker.mische@gmail.com>
Thu, 18 Jan 2018 23:39:03 +0000 (00:39 +0100)
Node.js treats an equal sign as the end of a Base64 encoded string.
Hence `Buffer.from('=bad')` results in an empty string.

index.js
test/node/test-buffer-alloc.js

index 0adbef639f6b4d21755d5c73bb053659d1aa3682..6944c0594257d1f06137f2170d4d20cea3412b3d 100644 (file)
--- a/index.js
+++ b/index.js
@@ -1560,9 +1560,11 @@ Buffer.prototype.fill = function fill (val, start, end, encoding) {
 // HELPER FUNCTIONS
 // ================
 
-var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
+var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_=]/g
 
 function base64clean (str) {
+  // Node takes equal signs as end of the Base64 encoding
+  str = str.split('=')[0]
   // Node strips out invalid characters like \n and \t from the string, base64-js does not
   str = str.trim().replace(INVALID_BASE64_RE, '')
   // Node converts strings with length < 2 to ''
index b2ffed199a8cfa9d39094a0ab3a7cfd686f9073c..c813a2325883bb55a2db19ae816d341c5663b62e 100644 (file)
@@ -459,10 +459,10 @@ assert.strictEqual(
   assert.strictEqual(b.toString('latin1', 0, pos),
                      'Madness?! This is node.js!');
 }
-/*
+
 // 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'));