# HG changeset patch # User Mike Becker # Date 1740314830 -3600 # Node ID 086e63c8dd068747729151802406ab0f70007517 # Parent e20e100fa71f6424b7eb931db9e9f69b30f53819 fix cxListFind() crashing on empty linked lists diff -r e20e100fa71f -r 086e63c8dd06 src/linked_list.c --- 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( diff -r e20e100fa71f -r 086e63c8dd06 tests/test_list.c --- 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); } }