From 7c39ebd05cbead99ead5b29021d8b83468a39d4d Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Sun, 13 Dec 2015 15:20:58 -0300 Subject: [PATCH] -hash dictionaries properly instead of using pointer, fixes #2880 --- core/dictionary.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/core/dictionary.cpp b/core/dictionary.cpp index b2d31f230d1..c544573629e 100644 --- a/core/dictionary.cpp +++ b/core/dictionary.cpp @@ -160,7 +160,20 @@ void Dictionary::_unref() const { } uint32_t Dictionary::hash() const { - return hash_djb2_one_64(make_uint64_t(_p)); + uint32_t h=hash_djb2_one_32(Variant::DICTIONARY); + + List keys; + get_key_list(&keys); + + for (List::Element *E=keys.front();E;E=E->next()) { + + h = hash_djb2_one_32( E->get().hash(), h); + h = hash_djb2_one_32( operator[](E->get()).hash(), h); + + } + + + return h; } Array Dictionary::keys() const {