diff --git a/index.js b/index.js index c44df8c..4de537b 100644 --- a/index.js +++ b/index.js @@ -39,8 +39,9 @@ function nowEpochSeconds(){ return Math.floor(new Date().getTime()/1000); } -function base64urlEncode(str) { - return new Buffer(str) +function base64urlEncode(data) { + const str = typeof data === 'number' ? data.toString() : data; + return Buffer.from(str) .toString('base64') .replace(/\+/g, '-') .replace(/\//g, '_') @@ -277,7 +278,7 @@ Parser.prototype.isSupportedAlg = isSupportedAlg; Parser.prototype.safeJsonParse = function(input) { var result; try{ - result = JSON.parse(new Buffer(base64urlUnescape(input),'base64')); + result = JSON.parse(Buffer.from(base64urlUnescape(input),'base64')); }catch(e){ return e; } @@ -297,7 +298,7 @@ Parser.prototype.parse = function parse(jwtString,cb){ var body = this.safeJsonParse(segments[1]); if(segments[2]){ - signature = new Buffer(base64urlUnescape(segments[2]),'base64') + signature = Buffer.from(base64urlUnescape(segments[2]),'base64') .toString('base64'); } diff --git a/test/builder.js b/test/builder.js index c1a20d2..424109a 100644 --- a/test/builder.js +++ b/test/builder.js @@ -101,12 +101,19 @@ describe('base64 URL Encoding',function(){ assert.equal( nJwt.Jwt.prototype.sign( [compactHeader,compactBody].join('.'), - 'HS256',new Buffer(key,'base64') + 'HS256',Buffer.from(key,'base64') ), expectedSignature ); }); + + it('does not create an uninitialized Buffer', function() { + // see https://nodejs.org/api/buffer.html#buffer_buffer_from_buffer_alloc_and_buffer_allocunsafe + var fromDigits = nJwt.base64urlEncode(10); + var fromString = nJwt.base64urlEncode('10'); + assert.equal(fromDigits, fromString); + }); });