Fix EINA_ARRAY_ITER_NEXT off by one bug. With this fix you can no longer push
authorcedric <cedric>
Fri, 19 Dec 2008 17:55:57 +0000 (17:55 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 19 Dec 2008 17:55:57 +0000 (17:55 +0000)
NULL pointer inside an array.

git-svn-id: http://svn.enlightenment.org/svn/e/trunk/eina@38232 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/include/eina_array.h
src/include/eina_inline_array.x

index 2de8f47..19f81b2 100644 (file)
@@ -125,9 +125,9 @@ EAPI Eina_Accessor *eina_array_accessor_new (const Eina_Array *array);
  * @endcode
  */
 #define EINA_ARRAY_ITER_NEXT(array, index, item, iterator)             \
-  for (index = 0, iterator = (array)->data, item = iterator != NULL ? *(iterator) : NULL; \
-       index < eina_array_count_get(array);                                    \
-       ++(index), item = *(++(iterator)))
+  for (index = 0, iterator = (array)->data; \
+       (index < eina_array_count_get(array)) && ((item = *((iterator)++))); \
+       ++(index))
 
 #include "eina_inline_array.x"
 
index c755c7f..41bf0a8 100644 (file)
@@ -59,6 +59,8 @@ EAPI Eina_Bool eina_array_grow(Eina_Array *array);
 static inline Eina_Bool
 eina_array_push(Eina_Array *array, const void *data)
 {
+   if (!data) return EINA_FALSE;
+
    if (UNLIKELY((array->count + 1) > array->total))
      if (!eina_array_grow(array)) return EINA_FALSE;