aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/simple_string_dictionary.h6
-rw-r--r--src/common/simple_string_dictionary_unittest.cc9
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");