]> git.kaiwu.me - njs.git/commitdiff
Fixed njs_key_string_get() usage.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 5 Feb 2020 12:54:56 +0000 (15:54 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Wed, 5 Feb 2020 12:54:56 +0000 (15:54 +0300)
njs_key_string_get() converts Symbol instances to strings,
while Symbols should never be converted to strings implicitly.
The function is expected to be used only while generating Error
messages.

Found by Clang static analyzer.

src/njs_object_prop.c
src/njs_value.c

index 45d6e2dbcc9acad915ccddaaaea252e7baa5d32a..47e6e035475a85560d81029d18fd22a692f789f5 100644 (file)
@@ -100,6 +100,7 @@ njs_object_property_add(njs_vm_t *vm, njs_value_t *object, njs_value_t *key,
     njs_bool_t replace)
 {
     njs_int_t           ret;
+    njs_value_t         key_value;
     njs_object_prop_t   *prop;
     njs_lvlhsh_query_t  lhq;
 
@@ -108,8 +109,13 @@ njs_object_property_add(njs_vm_t *vm, njs_value_t *object, njs_value_t *key,
         return NULL;
     }
 
+    ret = njs_value_to_key(vm, &key_value, key);
+    if (njs_slow_path(ret != NJS_OK)) {
+        return NULL;
+    }
+
     lhq.proto = &njs_object_hash_proto;
-    njs_key_string_get(vm, key, &lhq.key);
+    njs_string_get(&key_value, &lhq.key);
     lhq.key_hash = njs_djb_hash(lhq.key.start, lhq.key.length);
     lhq.value = prop;
     lhq.replace = replace;
@@ -432,8 +438,6 @@ done:
 
         } else {
             if (njs_slow_path(pq.lhq.key_hash == NJS_LENGTH_HASH)) {
-                njs_key_string_get(vm, &pq.key, &pq.lhq.key);
-
                 if (njs_strstr_eq(&pq.lhq.key, &length_key)) {
                     ret = njs_array_length_set(vm, object, prev, &prop->value);
                     if (ret != NJS_DECLINED) {
index 2ee52d10a46ec5721ff91c48ae542b66126380d6..ef069e45e3adba60a1e288b7f0c834801e59405b 100644 (file)
@@ -1288,8 +1288,6 @@ slow_path:
             switch (prop->type) {
             case NJS_PROPERTY:
                 if (njs_slow_path(pq.lhq.key_hash == NJS_LENGTH_HASH)) {
-                    njs_key_string_get(vm, &pq.key, &pq.lhq.key);
-
                     if (njs_strstr_eq(&pq.lhq.key, &length_key)) {
                         ret = njs_array_length_set(vm, value, prop, setval);
                         if (ret != NJS_DECLINED) {