From f4ed430ddc153582da2aee84ea209959bf6e51f4 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Thu, 31 Aug 2017 19:25:26 +0900 Subject: [PATCH] eina_array: Fix magic checks to return The EINA_MAGIC check inside eina_array were just printing the error message, without failing. This could lead to more crashes than necessary. @fix --- src/lib/eina/eina_array.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/lib/eina/eina_array.c b/src/lib/eina/eina_array.c index e439450021..2a7446e647 100644 --- a/src/lib/eina/eina_array.c +++ b/src/lib/eina/eina_array.c @@ -46,10 +46,13 @@ static const char EINA_MAGIC_ARRAY_STR[] = "Eina Array"; static const char EINA_MAGIC_ARRAY_ITERATOR_STR[] = "Eina Array Iterator"; static const char EINA_MAGIC_ARRAY_ACCESSOR_STR[] = "Eina Array Accessor"; -#define EINA_MAGIC_CHECK_ARRAY(d) \ - do { \ - if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY)) { \ - EINA_MAGIC_FAIL(d, EINA_MAGIC_ARRAY); } \ +#define EINA_MAGIC_CHECK_ARRAY(d, ...) \ + do { \ + if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY)) \ + { \ + EINA_MAGIC_FAIL(d, EINA_MAGIC_ARRAY); \ + return __VA_ARGS__; \ + } \ } while (0) #define EINA_MAGIC_CHECK_ARRAY_ITERATOR(d, ...) \ @@ -195,8 +198,7 @@ eina_array_grow(Eina_Array *array) unsigned int total; EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE); - - EINA_MAGIC_CHECK_ARRAY(array); + EINA_MAGIC_CHECK_ARRAY(array, EINA_FALSE); total = array->total + array->step; tmp = realloc(array->data, sizeof (void *) * total); @@ -350,7 +352,7 @@ eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data, EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(keep, EINA_FALSE); - EINA_MAGIC_CHECK_ARRAY(array); + EINA_MAGIC_CHECK_ARRAY(array, EINA_FALSE); if (array->total == 0) return EINA_TRUE; // 1. walk through all items and shuffle down any items on top of @@ -394,7 +396,7 @@ eina_array_iterator_new(const Eina_Array *array) Eina_Iterator_Array *it; EINA_SAFETY_ON_NULL_RETURN_VAL(array, NULL); - EINA_MAGIC_CHECK_ARRAY(array); + EINA_MAGIC_CHECK_ARRAY(array, NULL); it = calloc(1, sizeof (Eina_Iterator_Array)); if (!it) return NULL; @@ -419,7 +421,7 @@ eina_array_accessor_new(const Eina_Array *array) Eina_Accessor_Array *ac; EINA_SAFETY_ON_NULL_RETURN_VAL(array, NULL); - EINA_MAGIC_CHECK_ARRAY(array); + EINA_MAGIC_CHECK_ARRAY(array, NULL); ac = calloc(1, sizeof (Eina_Accessor_Array)); if (!ac) return NULL;