obj = njs_object(value);
- ret = njs_lvlhsh_find(&obj->__proto__->shared_hash, &lhq);
- if (ret == NJS_OK) {
- prop = lhq.value;
+ if (obj->__proto__ != NULL) {
+ /* obj->__proto__ can be NULL after __proto__: null assignment */
+ ret = njs_lvlhsh_find(&obj->__proto__->shared_hash, &lhq);
+ if (ret == NJS_OK) {
+ prop = lhq.value;
- if (prop->type == NJS_PROPERTY_HANDLER) {
- ret = prop->value.data.u.prop_handler(vm, value, init,
- &vm->retval);
- if (njs_slow_path(ret != NJS_OK)) {
- return ret;
- }
+ if (prop->type == NJS_PROPERTY_HANDLER) {
+ ret = prop->value.data.u.prop_handler(vm, value, init,
+ &vm->retval);
+ if (njs_slow_path(ret != NJS_OK)) {
+ return ret;
+ }
- break;
+ break;
+ }
}
}
{ njs_str("({}).__proto__ = null"),
njs_str("null") },
+ { njs_str("({__proto__:null}).__proto__"),
+ njs_str("undefined") },
+
+ { njs_str("({__proto__:null, a:1}).a"),
+ njs_str("1") },
+
{ njs_str("({__proto__: []}) instanceof Array"),
njs_str("true") },