]> git.kaiwu.me - njs.git/commitdiff
Fixed hash collision for empty string key.
authorArtem S. Povalyukhin <artem.povaluhin@gmail.com>
Thu, 21 Nov 2019 19:31:14 +0000 (22:31 +0300)
committerArtem S. Povalyukhin <artem.povaluhin@gmail.com>
Thu, 21 Nov 2019 19:31:14 +0000 (22:31 +0300)
The issue was introduced in 10a19a2e1d4f.

src/njs_object.c
src/njs_object.h
src/njs_value.h
src/test/njs_unit_test.c

index 34ef9d17a2bb783be656efd6a00518349b8fd0da..088aef683ec79c9f94e0e2f34532372e583a4f96 100644 (file)
@@ -171,7 +171,7 @@ njs_object_hash_test(njs_lvlhsh_query_t *lhq, void *data)
 
     if (njs_slow_path(njs_is_symbol(name))) {
         return ((njs_symbol_key(name) == lhq->key_hash)
-                && lhq->key.length == 0) ? NJS_OK : NJS_DECLINED;
+                && lhq->key.start == NULL) ? NJS_OK : NJS_DECLINED;
     }
 
     /* string. */
index 32e429366928c40dbcb2f20cbf79a8f51548ab4d..b64f9947330dd4967780c24fcac67af3fdf37acb 100644 (file)
@@ -110,6 +110,7 @@ njs_object_property_key_set(njs_lvlhsh_query_t *lhq, const njs_value_t *key,
     if (njs_is_symbol(key)) {
 
         lhq->key.length = 0;
+        lhq->key.start = NULL;
         lhq->key_hash = njs_symbol_key(key);
 
     } else {
index 7865a01396f2902cbff22cf92a9955b62ff5f9be..6d0ebfa1323b444d1187db6917a93aedce86e684 100644 (file)
@@ -871,6 +871,7 @@ njs_set_object_value(njs_value_t *value, njs_object_value_t *object_value)
 #define njs_property_query_init(pq, _query, _own)                             \
     do {                                                                      \
         (pq)->lhq.key.length = 0;                                             \
+        (pq)->lhq.key.start = NULL;                                           \
         (pq)->lhq.value = NULL;                                               \
         (pq)->own_whiteout = NULL;                                            \
         (pq)->query = _query;                                                 \
index d5826b75994a34e76262c6368a3a17e41857940b..37697386a61cd3a5973007dca8d6b55906982070 100644 (file)
@@ -10302,6 +10302,10 @@ static njs_unit_test_t  njs_test[] =
               "Object.getOwnPropertyDescriptor(o, Symbol.isConcatSpreadable).value"),
       njs_str("true") },
 
+    { njs_str("var o = {}, n = 5381 /* NJS_DJB_HASH_INIT */;"
+              "while(n--) o[Symbol()] = 'test'; o[''];"),
+      njs_str("undefined") },
+
     /* String */
 
     { njs_str("String()"),