brave-experiments / ad-block

Ad block engine used in the Brave browser for ABP filter syntax based lists like EasyList.
https://www.brave.com
Mozilla Public License 2.0
239 stars 95 forks source link

add test and fix for passing an invalid serialized dat info to client deserialize #153

Closed pes10k closed 5 years ago

pes10k commented 5 years ago

Passing an invalid string (something that wasn't generated from client.serialize) to client.deserialize crashes node.

This PR includes a test and fix

pes10k commented 5 years ago

its just an assert, not an exception

> const abpLib = require(".");
> (new abpLib.AdBlockClient()).deserialize("bad string")
node[21703]: ../src/node_buffer.cc:203:char *node::Buffer::Data(Local<v8::Value>): Assertion `val->IsArrayBufferView()' failed.
 1: 0x10005fbff node::Abort() [/usr/local/bin/node]
 2: 0x10005fb3c node::PrintErrorString(char const*, ...) [/usr/local/bin/node]
 3: 0x10004a179 node::Buffer::Data(v8::Local<v8::Object>) [/usr/local/bin/node]
 4: 0x103f32235 ad_block_client_wrap::AdBlockClientWrap::Deserialize(v8::FunctionCallbackInfo<v8::Value> const&) [/Users/pes/Code/brave-ad-block/build/Release/ad-block.node]
 5: 0x1001ca3f2 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo*) [/usr/local/bin/node]
 6: 0x1001c9a52 v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/usr/local/bin/node]
 7: 0x1001c9272 v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/usr/local/bin/node]
 8: 0x6010d4cfb7d 
fish: 'node' terminated by signal SIGABRT (Abort)
pes10k commented 5 years ago

@bbondy just a ping on this. Does it look good?