Sun, 23 Feb 2025 13:47:10 +0100
fix cxListFind() crashing on empty linked lists
src/linked_list.c | file | annotate | diff | comparison | revisions | |
tests/test_list.c | file | annotate | diff | comparison | revisions |
--- a/src/linked_list.c Sun Feb 23 13:25:53 2025 +0100 +++ b/src/linked_list.c Sun Feb 23 13:47:10 2025 +0100 @@ -920,6 +920,8 @@ const void *elem, bool remove ) { + if (list->collection.size == 0) return 0; + size_t index; cx_linked_list *ll = ((cx_linked_list *) list); cx_linked_list_node *node = cx_linked_list_find(
--- a/tests/test_list.c Sun Feb 23 13:25:53 2025 +0100 +++ b/tests/test_list.c Sun Feb 23 13:47:10 2025 +0100 @@ -968,16 +968,28 @@ CX_TEST(test_empty_list_at) { CX_TEST_DO { + // the placeholder empty list CX_TEST_ASSERT(cxListAt(cxEmptyList, 0) == NULL); CX_TEST_ASSERT(cxListAt(cxEmptyList, 1) == NULL); + // a "true" empty list + CxList *list = cxLinkedListCreateSimple(sizeof(int)); + CX_TEST_ASSERT(cxListAt(list, 0) == NULL); + CX_TEST_ASSERT(cxListAt(list, 1) == NULL); + cxListFree(list); } } CX_TEST(test_empty_list_find) { int x = 42, y = 1337; CX_TEST_DO { + // the placeholder empty list CX_TEST_ASSERT(cxListFind(cxEmptyList, &x) == 0); - CX_TEST_ASSERT(cxListFind(cxEmptyList, &y) == 0); + CX_TEST_ASSERT(cxListFindRemove(cxEmptyList, &y) == 0); + // a "true" empty list + CxList *list = cxLinkedListCreateSimple(sizeof(int)); + CX_TEST_ASSERT(cxListFind(list, &x) == 0); + CX_TEST_ASSERT(cxListFindRemove(list, &y) == 0); + cxListFree(list); } }