summaryrefslogtreecommitdiff
path: root/source3/lib/util.c
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2005-04-23 18:07:01 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:56:41 -0500
commit2e0cac8e3eb021aa8f5cad4ce8b72f98036af639 (patch)
treec2a8ad74f394b8c7a7a6286697a5edf91ef6611f /source3/lib/util.c
parent57eb9f47d058cc3c841aca11404bae2fed5367e4 (diff)
downloadsamba-2e0cac8e3eb021aa8f5cad4ce8b72f98036af639.tar.gz
samba-2e0cac8e3eb021aa8f5cad4ce8b72f98036af639.tar.bz2
samba-2e0cac8e3eb021aa8f5cad4ce8b72f98036af639.zip
r6445: Make us survive the PARANOID_MALLOC_CHECKER. Should we enable that for
--enable-developer=yes? Volker (This used to be commit 61d40ac60dd9c8c9bbcf92e4fc57fe1d706bc721)
Diffstat (limited to 'source3/lib/util.c')
-rw-r--r--source3/lib/util.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 52cf15da1e..77d4e6d2a6 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -984,18 +984,22 @@ void add_to_large_array(TALLOC_CTX *mem_ctx, size_t element_size,
void *element, void **array, uint32 *num_elements,
ssize_t *array_size)
{
- if (*array_size == -1)
+ if (*array_size < 0)
return;
if (*array == NULL) {
- if (*array_size == 0)
+ if (*array_size == 0) {
*array_size = 128;
+ }
+
+ if (*array_size >= MAX_ALLOC_SIZE/element_size) {
+ goto error;
+ }
if (mem_ctx != NULL)
- *array = talloc_array(mem_ctx, element_size,
- *array_size);
+ *array = TALLOC(mem_ctx, element_size * (*array_size));
else
- *array = malloc_array(element_size, *array_size);
+ *array = SMB_MALLOC(element_size * (*array_size));
if (*array == NULL)
goto error;
@@ -1004,13 +1008,16 @@ void add_to_large_array(TALLOC_CTX *mem_ctx, size_t element_size,
if (*num_elements == *array_size) {
*array_size *= 2;
+ if (*array_size >= MAX_ALLOC_SIZE/element_size) {
+ goto error;
+ }
+
if (mem_ctx != NULL)
- *array = talloc_realloc_array(mem_ctx, *array,
- element_size,
- *array_size);
+ *array = TALLOC_REALLOC(mem_ctx, *array,
+ element_size * (*array_size));
else
- *array = realloc_array(*array, element_size,
- *array_size);
+ *array = SMB_REALLOC(*array,
+ element_size * (*array_size));
if (*array == NULL)
goto error;