diff --git a/lib/spdylay_map.c b/lib/spdylay_map.c index 0451f582..0ada828d 100644 --- a/lib/spdylay_map.c +++ b/lib/spdylay_map.c @@ -164,12 +164,14 @@ static spdylay_map_entry* erase_rotate_recur(spdylay_map_entry *entry) static spdylay_map_entry* erase_recur(spdylay_map_entry *entry, key_type key) { - if(key < entry->key) { - entry->left = erase_recur(entry->left, key); - } else if(key > entry->key) { - entry->right = erase_recur(entry->right, key); - } else { - entry = erase_rotate_recur(entry); + if(entry != NULL) { + if(key < entry->key) { + entry->left = erase_recur(entry->left, key); + } else if(key > entry->key) { + entry->right = erase_recur(entry->right, key); + } else { + entry = erase_rotate_recur(entry); + } } return entry; } diff --git a/tests/spdylay_map_test.c b/tests/spdylay_map_test.c index 49481133..0c67c90f 100644 --- a/tests/spdylay_map_test.c +++ b/tests/spdylay_map_test.c @@ -47,9 +47,11 @@ void test_spdylay_map() spdylay_map_erase(&map, 1); CU_ASSERT(NULL == spdylay_map_find(&map, 1)); + spdylay_map_erase(&map, 1); + CU_ASSERT(NULL == spdylay_map_find(&map, 1)); + CU_ASSERT(strcmp("bar", spdylay_map_find(&map, 2)) == 0); CU_ASSERT(strcmp("shrubbery", spdylay_map_find(&map, 4)) == 0); spdylay_map_free(&map); } -