Description
If you perform a get() on a non-JSON document using the NodeJS SDK, it will cause v8 to crash with the following stack trace:
FATAL ERROR: v8::ToLocalChecked Empty MaybeLocal.
|
1: 0x100064fc7 node::Abort() [/usr/local/bin/node]
|
2: 0x10006563a node::errors::TryCatchScope::~TryCatchScope() [/usr/local/bin/node]
|
3: 0x10018db5a v8::Utils::ReportApiFailure(char const*, char const*) [/usr/local/bin/node]
|
4: 0x10561156a Couchnode::DefaultTranscoder::decodeJson(void const*, unsigned long) [/Users/matt/Documents/node/node_modules/couchbase/build/Release/couchbase_impl.node]
|
5: 0x105611897 Couchnode::DefaultTranscoder::decode(void const*, unsigned long, unsigned int) [/Users/matt/Documents/node/node_modules/couchbase/build/Release/couchbase_impl.node]
|
6: 0x10560635f _DispatchValueCallback(lcb_st*, int, lcb_RESPBASE const*) [/Users/matt/Documents/node/node_modules/couchbase/build/Release/couchbase_impl.node]
|
7: 0x105658726 mcreq_dispatch_response [/Users/matt/Documents/node/node_modules/couchbase/build/Release/couchbase_impl.node]
|
8: 0x10562ccff lcb::Server::try_read(lcbio_CTX*, rdb_IOROPE*) [/Users/matt/Documents/node/node_modules/couchbase/build/Release/couchbase_impl.node]
|
9: 0x10562df91 on_read(lcbio_CTX*, unsigned int) [/Users/matt/Documents/node/node_modules/couchbase/build/Release/couchbase_impl.node]
|
10: 0x105625656 Cr_handler [/Users/matt/Documents/node/node_modules/couchbase/build/Release/couchbase_impl.node]
|
11: 0x105612735 read_cb [/Users/matt/Documents/node/node_modules/couchbase/build/Release/couchbase_impl.node]
|
12: 0x1007c4301 uv__stream_io [/usr/local/bin/node]
|
13: 0x1007cb9dd uv__io_poll [/usr/local/bin/node]
|
14: 0x1007bc76a uv_run [/usr/local/bin/node]
|
15: 0x1000464f3 node::Start(v8::Isolate*, node::IsolateData*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) [/usr/local/bin/node]
|
16: 0x100044736 node::Start(uv_loop_s*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) [/usr/local/bin/node]
|
17: 0x1000443b7 node::Start(int, char**) [/usr/local/bin/node]
|
18: 0x100003034 start [/usr/local/bin/node]
|
Steps to Reproduce
1. Load a single non-json document into the cluster, e.g.:
/opt/couchbase/bin/cbc pillowfight -U 'couchbase://localhost/test' -u Administrator -P password --populate-only -I 1
|
2. Perform a get() on that document, e.g.:
var couchbase = require('couchbase')
|
var cluster = new couchbase.Cluster('couchbase://10.143.186.101/');
|
cluster.authenticate('Administrator', 'password');
|
var bucket = cluster.openBucket('test');
|
|
bucket.get('00000000000000000000', function (err, result) {
|
console.log('Got result: %j', result.value);
|
});
|
Attachments
For Gerrit Dashboard: JSCBC-630 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
119509,3 | JSCBC-630: Corrected issue with decoding invalid JSON. | v2 | couchnode | Status: MERGED | +2 | +1 |