Skip to content
Snippets Groups Projects
Commit c04b80cb authored by murgatroid99's avatar murgatroid99
Browse files

Make Node not segfault when it receives a compressed message

parent 61aa858d
No related branches found
No related tags found
No related merge requests found
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include "grpc/grpc.h" #include "grpc/grpc.h"
#include "grpc/byte_buffer_reader.h" #include "grpc/byte_buffer_reader.h"
#include "grpc/support/slice.h" #include "grpc/support/slice.h"
#include "grpc/support/log.h"
#include "byte_buffer.h" #include "byte_buffer.h"
...@@ -72,17 +73,13 @@ Local<Value> ByteBufferToBuffer(grpc_byte_buffer *buffer) { ...@@ -72,17 +73,13 @@ Local<Value> ByteBufferToBuffer(grpc_byte_buffer *buffer) {
if (buffer == NULL) { if (buffer == NULL) {
return scope.Escape(Nan::Null()); return scope.Escape(Nan::Null());
} }
size_t length = grpc_byte_buffer_length(buffer); gpr_log(GPR_DEBUG, "Compressed size: %d", grpc_byte_buffer_length(buffer));
char *result = new char[length];
size_t offset = 0;
grpc_byte_buffer_reader reader; grpc_byte_buffer_reader reader;
grpc_byte_buffer_reader_init(&reader, buffer); grpc_byte_buffer_reader_init(&reader, buffer);
gpr_slice next; gpr_slice slice = grpc_byte_buffer_reader_readall(&reader);
while (grpc_byte_buffer_reader_next(&reader, &next) != 0) { size_t length = GPR_SLICE_LENGTH(slice);
memcpy(result + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next)); char *result = new char[length];
offset += GPR_SLICE_LENGTH(next); memcpy(result, GPR_SLICE_START_PTR(slice), length);
gpr_slice_unref(next);
}
return scope.Escape(MakeFastBuffer( return scope.Escape(MakeFastBuffer(
Nan::NewBuffer(result, length, delete_buffer, NULL).ToLocalChecked())); Nan::NewBuffer(result, length, delete_buffer, NULL).ToLocalChecked()));
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment