]> git.kaiwu.me - njs.git/commitdiff
Fixed NULL-pointer dereference in "__proto__" property handler.
authorAlexander Borisov <alexander.borisov@nginx.com>
Wed, 4 Mar 2020 14:12:55 +0000 (17:12 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Wed, 4 Mar 2020 14:12:55 +0000 (17:12 +0300)
This closes #293 issue on GitHub.

src/njs_object.c
src/test/njs_unit_test.c

index 5e16fd477fc9bb5928907dc1ac881d98b7d54e10..ac7cbf603468b7f6f3b4e4a865f7e15e30c3b348 100644 (file)
@@ -2005,7 +2005,12 @@ njs_primitive_prototype_get_proto(njs_vm_t *vm, njs_object_prop_t *prop,
         proto = &vm->prototypes[index].object;
     }
 
-    njs_set_type_object(retval, proto, proto->type);
+    if (proto != NULL) {
+        njs_set_type_object(retval, proto, proto->type);
+
+    } else {
+        njs_set_undefined(retval);
+    }
 
     return NJS_OK;
 }
index 614cf2eef67cc975ec9b33c847ab8354272c6efe..00cc5ed19e47ad9ee047324182f1864d4e4a5e0c 100644 (file)
@@ -12637,6 +12637,9 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("typeof Object.setPrototypeOf({}, null)"),
       njs_str("object") },
 
+    { njs_str("Object.setPrototypeOf(Object.getPrototypeOf(''), null).__proto__"),
+      njs_str("undefined") },
+
     { njs_str("var p = {}; var o = Object.create(p);"
                  "p.isPrototypeOf(o)"),
       njs_str("true") },