From dbb7f47b19e60551ef4707f6a2cb60f1bd8334dd Mon Sep 17 00:00:00 2001 From: Qunxin Liu Date: Thu, 3 Nov 2022 11:55:41 -0700 Subject: [PATCH] fix bug in hb_hashmap_t has() interface It was not working when the value type is hb_bytes_t because hb_array_t overloaded operator & --- src/hb-map.hh | 2 +- src/test-map.cc | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/hb-map.hh b/src/hb-map.hh index 8302e3f8c..30a8e627d 100644 --- a/src/hb-map.hh +++ b/src/hb-map.hh @@ -221,7 +221,7 @@ struct hb_hashmap_t unsigned int i = bucket_for (key); if (items[i].is_real () && items[i] == key) { - if (vp) *vp = &items[i].value; + if (vp) *vp = std::addressof (items[i].value); return true; } else diff --git a/src/test-map.cc b/src/test-map.cc index 357a8b01b..861166ef6 100644 --- a/src/test-map.cc +++ b/src/test-map.cc @@ -240,5 +240,15 @@ main (int argc, char **argv) m1->set (2,4); assert (!m.has (p2)); } + /* Test value type with hb_bytes_t. */ + { + hb_hashmap_t m; + char c_str[] = "Test"; + hb_bytes_t bytes (c_str, 4); + + m.set (1, bytes); + assert (m.has (1)); + } + return 0; }