diff --git a/internal/cbm/arena.c b/internal/cbm/arena.c index 7f268048f..cb8690963 100644 --- a/internal/cbm/arena.c +++ b/internal/cbm/arena.c @@ -33,7 +33,7 @@ static int arena_grow(CBMArena *a, size_t min_size) { } void *cbm_arena_alloc(CBMArena *a, size_t n) { - if (n == 0) { + if (!a || n == 0) { return NULL; } // 8-byte alignment diff --git a/src/discover/discover.c b/src/discover/discover.c index 4e059b76a..0601cf52e 100644 --- a/src/discover/discover.c +++ b/src/discover/discover.c @@ -44,7 +44,7 @@ static const char *ALWAYS_SKIP_DIRS[] = { /* Deploy */ ".vercel", ".netlify", /* Misc */ - ".qdrant_code_embeddings", ".tmp", "vendor", NULL}; + ".qdrant_code_embeddings", ".tmp", "vendor", "vendored", NULL}; static const char *FAST_SKIP_DIRS[] = { "generated", "gen", "auto-generated", "fixtures", "testdata", "test_data", diff --git a/src/foundation/arena.c b/src/foundation/arena.c index f6345dbe8..3ae0b9a83 100644 --- a/src/foundation/arena.c +++ b/src/foundation/arena.c @@ -56,7 +56,7 @@ static int arena_grow(CBMArena *a, size_t min_size) { } void *cbm_arena_alloc(CBMArena *a, size_t n) { - if (n == 0) { + if (!a || n == 0) { return NULL; } /* 8-byte alignment */ diff --git a/tests/test_arena.c b/tests/test_arena.c index 3ce19f8f4..788c1eb9c 100644 --- a/tests/test_arena.c +++ b/tests/test_arena.c @@ -45,6 +45,12 @@ TEST(arena_alloc_zero) { PASS(); } +TEST(arena_alloc_null_arena) { + void *p = cbm_arena_alloc(NULL, 16); + ASSERT_NULL(p); + PASS(); +} + TEST(arena_alloc_alignment) { CBMArena a; cbm_arena_init(&a); @@ -426,6 +432,7 @@ SUITE(arena) { RUN_TEST(arena_init_sized); RUN_TEST(arena_alloc_basic); RUN_TEST(arena_alloc_zero); + RUN_TEST(arena_alloc_null_arena); RUN_TEST(arena_alloc_alignment); RUN_TEST(arena_alloc_grows_blocks); RUN_TEST(arena_alloc_large_single); diff --git a/tests/test_discover.c b/tests/test_discover.c index 94f6b8a8f..74e76fea8 100644 --- a/tests/test_discover.c +++ b/tests/test_discover.c @@ -37,6 +37,10 @@ TEST(skip_vendor) { ASSERT_TRUE(cbm_should_skip_dir("vendor", CBM_MODE_FULL)); PASS(); } +TEST(skip_vendored) { + ASSERT_TRUE(cbm_should_skip_dir("vendored", CBM_MODE_FULL)); + PASS(); +} TEST(skip_terraform) { ASSERT_TRUE(cbm_should_skip_dir(".terraform", CBM_MODE_FULL)); PASS(); @@ -680,6 +684,7 @@ SUITE(discover) { RUN_TEST(skip_dist); RUN_TEST(skip_target); RUN_TEST(skip_vendor); + RUN_TEST(skip_vendored); RUN_TEST(skip_terraform); RUN_TEST(skip_coverage); RUN_TEST(skip_idea);