Merge branch 'bugfix/malloc_zero_return_null' into 'master'
bugfix/multi_heap: fix malloc(0) returning valid pointer in some poisoning configurations Closes IDF-1482 See merge request espressif/esp-idf!8012
This commit is contained in:
commit
dd8d1deacb
3 changed files with 24 additions and 1 deletions
|
@ -187,6 +187,10 @@ static bool verify_fill_pattern(void *data, size_t size, bool print_errors, bool
|
||||||
|
|
||||||
void *multi_heap_aligned_alloc(multi_heap_handle_t heap, size_t size, size_t alignment)
|
void *multi_heap_aligned_alloc(multi_heap_handle_t heap, size_t size, size_t alignment)
|
||||||
{
|
{
|
||||||
|
if (!size) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (size > SIZE_MAX - POISON_OVERHEAD) {
|
if (size > SIZE_MAX - POISON_OVERHEAD) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -213,9 +217,14 @@ void *multi_heap_aligned_alloc(multi_heap_handle_t heap, size_t size, size_t ali
|
||||||
|
|
||||||
void *multi_heap_malloc(multi_heap_handle_t heap, size_t size)
|
void *multi_heap_malloc(multi_heap_handle_t heap, size_t size)
|
||||||
{
|
{
|
||||||
|
if (!size) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if(size > SIZE_MAX - POISON_OVERHEAD) {
|
if(size > SIZE_MAX - POISON_OVERHEAD) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
multi_heap_internal_lock(heap);
|
multi_heap_internal_lock(heap);
|
||||||
poison_head_t *head = multi_heap_malloc_impl(heap, size + POISON_OVERHEAD);
|
poison_head_t *head = multi_heap_malloc_impl(heap, size + POISON_OVERHEAD);
|
||||||
uint8_t *data = NULL;
|
uint8_t *data = NULL;
|
||||||
|
|
|
@ -160,3 +160,10 @@ TEST_CASE("Capabilities aligned calloc test", "[heap]")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("aligned_alloc(0) should return a NULL pointer", "[heap]")
|
||||||
|
{
|
||||||
|
void *p;
|
||||||
|
p = heap_caps_aligned_alloc(32, 0, MALLOC_CAP_DEFAULT);
|
||||||
|
TEST_ASSERT(p == NULL);
|
||||||
|
}
|
||||||
|
|
|
@ -127,3 +127,10 @@ TEST_CASE("unreasonable allocs should all fail", "[heap]")
|
||||||
TEST_ASSERT_NULL(test_malloc_wrapper(xPortGetFreeHeapSize() - 1));
|
TEST_ASSERT_NULL(test_malloc_wrapper(xPortGetFreeHeapSize() - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("malloc(0) should return a NULL pointer", "[heap]")
|
||||||
|
{
|
||||||
|
void *p;
|
||||||
|
p = malloc(0);
|
||||||
|
TEST_ASSERT(p == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue