From 4560a0a07553189eb9869a5a683ebf617770410d Mon Sep 17 00:00:00 2001 From: David Fox Date: Tue, 25 Apr 2017 11:40:27 -0500 Subject: [PATCH 1/5] Prevent decoding and then re-encoding to base64 --- packages/pubsub/src/subscription.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/pubsub/src/subscription.js b/packages/pubsub/src/subscription.js index 6610e7ef814..9a06eecf468 100644 --- a/packages/pubsub/src/subscription.js +++ b/packages/pubsub/src/subscription.js @@ -357,11 +357,16 @@ Subscription.formatMessage_ = function(msg, encoding) { message.id = innerMessage.messageId; if (innerMessage.data) { - message.data = new Buffer(innerMessage.data, 'base64').toString(encoding); + if (encoding === 'base64') { + // Prevent decoding and then re-encoding to base64 + message.data = innerMessage.data; + } else { + message.data = new Buffer(innerMessage.data, 'base64').toString(encoding); - try { - message.data = JSON.parse(message.data); - } catch(e) {} + try { + message.data = JSON.parse(message.data); + } catch(e) {} + } } if (innerMessage.attributes) { From 743a8dd59d2c38411835cba6c5c1bc54af5812bc Mon Sep 17 00:00:00 2001 From: David Fox Date: Tue, 25 Apr 2017 11:51:13 -0500 Subject: [PATCH 2/5] Fix style errors --- packages/pubsub/src/subscription.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/pubsub/src/subscription.js b/packages/pubsub/src/subscription.js index 9a06eecf468..a9bd327f958 100644 --- a/packages/pubsub/src/subscription.js +++ b/packages/pubsub/src/subscription.js @@ -361,7 +361,8 @@ Subscription.formatMessage_ = function(msg, encoding) { // Prevent decoding and then re-encoding to base64 message.data = innerMessage.data; } else { - message.data = new Buffer(innerMessage.data, 'base64').toString(encoding); + message.data = + new Buffer(innerMessage.data, 'base64').toString(encoding); try { message.data = JSON.parse(message.data); From 77e6003865180b36a183a39bf36ca9bbf95a7e6b Mon Sep 17 00:00:00 2001 From: David Fox Date: Tue, 25 Apr 2017 13:04:44 -0500 Subject: [PATCH 3/5] Cover new base64 handling in tests --- packages/pubsub/test/subscription.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/pubsub/test/subscription.js b/packages/pubsub/test/subscription.js index bb0f65b9b14..41f295d5ca6 100644 --- a/packages/pubsub/test/subscription.js +++ b/packages/pubsub/test/subscription.js @@ -344,7 +344,7 @@ describe('Subscription', function() { it('should decode buffer to specified encoding', function() { var msg = Subscription - .formatMessage_(messageObj.receivedMessages[0], 'binary'); + .formatMessage_(messageObj.receivedMessages[0], 'base64'); assert.deepEqual(msg, expectedMessageAsBinary); }); }); From 11870e1b0a4250d17379fc6bfdbcca7689bccf66 Mon Sep 17 00:00:00 2001 From: David Fox Date: Tue, 25 Apr 2017 13:21:18 -0500 Subject: [PATCH 4/5] Update test to check base64 encoding --- packages/pubsub/test/subscription.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/pubsub/test/subscription.js b/packages/pubsub/test/subscription.js index 41f295d5ca6..a84bc9b9c2d 100644 --- a/packages/pubsub/test/subscription.js +++ b/packages/pubsub/test/subscription.js @@ -77,6 +77,11 @@ describe('Subscription', function() { data: messageBinary, id: 7 }; + var expectedMessageAsBase64 = { + ackId: 'abc', + data: messageBuffer, + id: 7 + }; before(function() { Subscription = proxyquire('../src/subscription.js', { @@ -342,9 +347,15 @@ describe('Subscription', function() { assert.deepEqual(msg, expectedMessage); }); - it('should decode buffer to specified encoding', function() { + it('should decode buffer to base64', function() { var msg = Subscription .formatMessage_(messageObj.receivedMessages[0], 'base64'); + assert.deepEqual(msg, expectedMessageAsBase64); + }); + + it('should decode buffer to specified encoding', function() { + var msg = Subscription + .formatMessage_(messageObj.receivedMessages[0], 'binary'); assert.deepEqual(msg, expectedMessageAsBinary); }); }); From cad8fe747d931257ddbd904924bcf237092a4796 Mon Sep 17 00:00:00 2001 From: Stephen Sawchuk Date: Tue, 25 Apr 2017 16:19:56 -0400 Subject: [PATCH 5/5] Rename to `enc` --- packages/pubsub/src/subscription.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/pubsub/src/subscription.js b/packages/pubsub/src/subscription.js index a9bd327f958..91847efe974 100644 --- a/packages/pubsub/src/subscription.js +++ b/packages/pubsub/src/subscription.js @@ -347,7 +347,7 @@ modelo.inherits(Subscription, commonGrpc.ServiceObject, events.EventEmitter); * * @private */ -Subscription.formatMessage_ = function(msg, encoding) { +Subscription.formatMessage_ = function(msg, enc) { var innerMessage = msg.message; var message = { ackId: msg.ackId @@ -357,12 +357,11 @@ Subscription.formatMessage_ = function(msg, encoding) { message.id = innerMessage.messageId; if (innerMessage.data) { - if (encoding === 'base64') { - // Prevent decoding and then re-encoding to base64 + if (enc === 'base64') { + // Prevent decoding and then re-encoding to base64. message.data = innerMessage.data; } else { - message.data = - new Buffer(innerMessage.data, 'base64').toString(encoding); + message.data = Buffer.from(innerMessage.data, 'base64').toString(enc); try { message.data = JSON.parse(message.data);