From b9127eb0a5d64a2317197e3b4956bdd7450523da Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Tue, 21 Feb 2012 13:57:38 +0100 Subject: [PATCH] buffer: support decoding of URL-safe base64 --- src/node_buffer.cc | 6 ++++-- test/simple/test-buffer.js | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/node_buffer.cc b/src/node_buffer.cc index 87b5bd4378..1aac8bc3bf 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -278,13 +278,15 @@ Handle Buffer::Ucs2Slice(const Arguments &args) { static const char *base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"; + +// supports regular and URL-safe base64 static const int unbase64_table[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,-1,-1,-2,-1,-1 ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 - ,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63 + ,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,62,-1,63 ,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1 ,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14 - ,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1 + ,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,63 ,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 ,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1 ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 diff --git a/test/simple/test-buffer.js b/test/simple/test-buffer.js index fd41ba3f8f..d211f797ca 100644 --- a/test/simple/test-buffer.js +++ b/test/simple/test-buffer.js @@ -279,6 +279,12 @@ assert.deepEqual(g, new Buffer([0, 1, 2, 3])); // Test toString('base64') // assert.equal('TWFu', (new Buffer('Man')).toString('base64')); + +// test that regular and URL-safe base64 both work +var expected = [0xff, 0xff, 0xbe, 0xff, 0xef, 0xbf, 0xfb, 0xef, 0xff]; +assert.deepEqual(Buffer('//++/++/++//', 'base64'), Buffer(expected)); +assert.deepEqual(Buffer('__--_--_--__', 'base64'), Buffer(expected)); + // big example var quote = 'Man is distinguished, not only by his reason, but by this ' + 'singular passion from other animals, which is a lust ' +