changeset 147:535f12e0a5af

Add a flag to prevent insertions at out of bounds
author David Demelier <markand@malikania.fr>
date Fri, 11 May 2012 20:06:41 +0200
parents 5109083b4794
children 1558251b2cf2
files array.c array.h parray.c parray.h
diffstat 4 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/array.c	Fri May 11 19:06:56 2012 +0200
+++ b/array.c	Fri May 11 20:06:41 2012 +0200
@@ -109,6 +109,10 @@
 int
 array_insert(struct array *arr, const void *data, int index)
 {
+	if (arr->flags & ARRAY_INSERTSAFE)
+		if (index < 0 || index > arr->length)
+			return -1;
+
 	if (index < 0)
 		return array_push(arr, data);
 	if (index >= arr->length)
--- a/array.h	Fri May 11 19:06:56 2012 +0200
+++ b/array.h	Fri May 11 20:06:41 2012 +0200
@@ -33,7 +33,8 @@
 	ARRAY_AUTO		= 0,		/* array grows automatically */
 	ARRAY_FIXED		= (1 << 0),	/* fixed size length */
 	ARRAY_FASTREMOVE	= (1 << 1),	/* use last object when removing */
-	ARRAY_CLEARBITS		= (1 << 2)	/* clear data when inserting/removing */
+	ARRAY_CLEARBITS		= (1 << 2),	/* clear data when inserting/removing */
+	ARRAY_INSERTSAFE	= (1 << 3)	/* insertion must have valid indexes */
 };
 
 struct array {
--- a/parray.c	Fri May 11 19:06:56 2012 +0200
+++ b/parray.c	Fri May 11 20:06:41 2012 +0200
@@ -108,6 +108,10 @@
 int
 parray_insert(struct parray *arr, void *data, int index)
 {
+	if (arr->flags & PARRAY_INSERTSAFE)
+		if (index < 0 || index > arr->length)
+			return -1;
+
 	if (index < 0)
 		return parray_push(arr, data);
 	if (index >= arr->length)
--- a/parray.h	Fri May 11 19:06:56 2012 +0200
+++ b/parray.h	Fri May 11 20:06:41 2012 +0200
@@ -33,7 +33,8 @@
 	PARRAY_AUTO		= 0,		/* array grows automatically */
 	PARRAY_FIXED		= (1 << 0),	/* fixed size length */
 	PARRAY_FASTREMOVE	= (1 << 1),	/* use last object when removing */
-	PARRAY_NULLEND		= (1 << 2)	/* always has a NULL pointer at end */
+	PARRAY_NULLEND		= (1 << 2),	/* always has a NULL pointer at end */
+	PARRAY_INSERTSAFE	= (1 << 3)	/* insertion must have valid indexes */
 };
 
 struct parray {