Skip to content
Snippets Groups Projects
Commit 6fed5dcb authored by Michael Lumish's avatar Michael Lumish Committed by GitHub
Browse files

Merge pull request #12003 from murgatroid99/node_fix_batch_argument_segfault

Node: fix segfault with incorrect status argument types
parents 9d3f1d49 8de7c099
No related branches found
No related tags found
No related merge requests found
......@@ -260,7 +260,10 @@ class SendClientCloseOp : public Op {
class SendServerStatusOp : public Op {
public:
SendServerStatusOp() { grpc_metadata_array_init(&status_metadata); }
SendServerStatusOp() {
details = grpc_empty_slice();
grpc_metadata_array_init(&status_metadata);
}
~SendServerStatusOp() {
grpc_slice_unref(details);
DestroyMetadataArray(&status_metadata);
......@@ -381,7 +384,10 @@ class ReadMessageOp : public Op {
class ClientStatusOp : public Op {
public:
ClientStatusOp() { grpc_metadata_array_init(&metadata_array); }
ClientStatusOp() {
grpc_metadata_array_init(&metadata_array);
status_details = grpc_empty_slice();
}
~ClientStatusOp() {
grpc_metadata_array_destroy(&metadata_array);
......
......@@ -188,6 +188,103 @@ describe('call', function() {
}, TypeError);
});
});
describe('startBatch with message', function() {
it('should fail with null argument', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_MESSAGE] = null;
call.startBatch(batch, function(){});
}, TypeError);
});
it('should fail with numeric argument', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_MESSAGE] = 5;
call.startBatch(batch, function(){});
}, TypeError);
});
it('should fail with string argument', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_MESSAGE] = 'value';
call.startBatch(batch, function(){});
}, TypeError);
});
});
describe('startBatch with status', function() {
it('should fail without a code', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
details: 'details string',
metadata: {}
};
call.startBatch(batch, function(){});
}, TypeError);
});
it('should fail without details', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
code: 0,
metadata: {}
};
call.startBatch(batch, function(){});
}, TypeError);
});
it('should fail without metadata', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
code: 0,
details: 'details string'
};
call.startBatch(batch, function(){});
}, TypeError);
});
it('should fail with incorrectly typed code argument', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
code: 'code string',
details: 'details string',
metadata: {}
};
call.startBatch(batch, function(){});
}, TypeError);
});
it('should fail with incorrectly typed details argument', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
code: 0,
details: 5,
metadata: {}
};
call.startBatch(batch, function(){});
}, TypeError);
});
it('should fail with incorrectly typed metadata argument', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
assert.throws(function() {
var batch = {};
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
code: 0,
details: 'details string',
metadata: 'abc'
};
call.startBatch(batch, function(){});
}, TypeError);
});
});
describe('cancel', function() {
it('should succeed', function() {
var call = new grpc.Call(channel, 'method', getDeadline(1));
......
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