From 8d8969dd1e109cfabfed00d5d9ead9e1b61305bd Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Wed, 5 Feb 2020 15:54:56 +0300 Subject: [PATCH] Fixed njs_key_string_get() usage. 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 | 10 +++++++--- src/njs_value.c | 2 -- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/njs_object_prop.c b/src/njs_object_prop.c index 45d6e2db..47e6e035 100644 --- a/src/njs_object_prop.c +++ b/src/njs_object_prop.c @@ -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) { diff --git a/src/njs_value.c b/src/njs_value.c index 2ee52d10..ef069e45 100644 --- a/src/njs_value.c +++ b/src/njs_value.c @@ -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) { -- 2.47.3