To be consistent with the rest of the code, the index paramater should
not be evaluated multiple times. Calling this with rand() % arr.size
would otherwise generally segfault.
---
 ccan/darray/darray.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/ccan/darray/darray.h b/ccan/darray/darray.h
index 8d47645b..6dd34f08 100644
--- a/ccan/darray/darray.h
+++ b/ccan/darray/darray.h
@@ -224,8 +224,9 @@ typedef darray(unsigned long)  darray_ulong;
 #define darray_pop_check(arr) ((arr).size ? darray_pop(arr) : NULL)
 /* Warning, slow: Requires copying all elements after removed item. */
 #define darray_remove(arr, index) do { \
-       if (index < arr.size-1)    \
-               memmove(&(arr).item[index], &(arr).item[index+1], 
((arr).size-1-index)*sizeof(*(arr).item)); \
+       size_t __index = index; \
+       if (__index < arr.size-1)    \
+               memmove(&(arr).item[__index], &(arr).item[__index+1], 
((arr).size-1-__index)*sizeof(*(arr).item)); \
        (arr).size--;  \
        } while(0)
 
-- 
2.14.1

_______________________________________________
ccan mailing list
ccan@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/ccan

Reply via email to