diff options
-rw-r--r-- | src/common/simple_string_dictionary.h | 6 | ||||
-rw-r--r-- | src/common/simple_string_dictionary_unittest.cc | 9 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/common/simple_string_dictionary.h b/src/common/simple_string_dictionary.h index 20440f60..e241aff5 100644 --- a/src/common/simple_string_dictionary.h +++ b/src/common/simple_string_dictionary.h @@ -156,7 +156,8 @@ class NonAllocatingMap { // Stores |value| into |key|, replacing the existing value if |key| is // already present. |key| must not be NULL. If |value| is NULL, the key is - // removed from the map. + // removed from the map. If there is no more space in the map, then the + // operation silently fails. void SetKeyValue(const char* key, const char* value) { if (!value) { RemoveKey(key); @@ -191,7 +192,8 @@ class NonAllocatingMap { } // If the map is out of space, entry will be NULL. - assert(entry); + if (!entry) + return; #ifndef NDEBUG // Sanity check that the key only appears once. diff --git a/src/common/simple_string_dictionary_unittest.cc b/src/common/simple_string_dictionary_unittest.cc index ec05cfaa..5fbc481c 100644 --- a/src/common/simple_string_dictionary_unittest.cc +++ b/src/common/simple_string_dictionary_unittest.cc @@ -278,15 +278,18 @@ TEST(NonAllocatingMapTest, Serialize) { EXPECT_STREQ("hig", deserialized.GetValueForKey("tre")); } -#ifndef NDEBUG - +// Running out of space shouldn't crash. TEST(NonAllocatingMapTest, OutOfSpace) { NonAllocatingMap<3, 2, 2> map; map.SetKeyValue("a", "1"); map.SetKeyValue("b", "2"); - ASSERT_DEATH(map.SetKeyValue("c", "3"), ""); + map.SetKeyValue("c", "3"); + EXPECT_EQ(2u, map.GetCount()); + EXPECT_FALSE(map.GetValueForKey("c")); } +#ifndef NDEBUG + TEST(NonAllocatingMapTest, KeyTooLong) { NonAllocatingMap<3, 10, 12> map; map.SetKeyValue("ab", "cdefghi"); |