From c04b80cb4797bb51a8350eebcdad87c17661f4ce Mon Sep 17 00:00:00 2001 From: murgatroid99 <mlumish@google.com> Date: Wed, 25 May 2016 15:14:39 -0700 Subject: [PATCH] Make Node not segfault when it receives a compressed message --- src/node/ext/byte_buffer.cc | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/node/ext/byte_buffer.cc b/src/node/ext/byte_buffer.cc index 8e0b6916e9..56e0b45ece 100644 --- a/src/node/ext/byte_buffer.cc +++ b/src/node/ext/byte_buffer.cc @@ -38,6 +38,7 @@ #include "grpc/grpc.h" #include "grpc/byte_buffer_reader.h" #include "grpc/support/slice.h" +#include "grpc/support/log.h" #include "byte_buffer.h" @@ -72,17 +73,13 @@ Local<Value> ByteBufferToBuffer(grpc_byte_buffer *buffer) { if (buffer == NULL) { return scope.Escape(Nan::Null()); } - size_t length = grpc_byte_buffer_length(buffer); - char *result = new char[length]; - size_t offset = 0; + gpr_log(GPR_DEBUG, "Compressed size: %d", grpc_byte_buffer_length(buffer)); grpc_byte_buffer_reader reader; grpc_byte_buffer_reader_init(&reader, buffer); - gpr_slice next; - while (grpc_byte_buffer_reader_next(&reader, &next) != 0) { - memcpy(result + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next)); - offset += GPR_SLICE_LENGTH(next); - gpr_slice_unref(next); - } + gpr_slice slice = grpc_byte_buffer_reader_readall(&reader); + size_t length = GPR_SLICE_LENGTH(slice); + char *result = new char[length]; + memcpy(result, GPR_SLICE_START_PTR(slice), length); return scope.Escape(MakeFastBuffer( Nan::NewBuffer(result, length, delete_buffer, NULL).ToLocalChecked())); } -- GitLab