summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2005-04-07 19:39:34 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:56:31 -0500
commit28772dfca1f9e7afd01f7ea522cb2e697c318e22 (patch)
treedee8b73ec5e2aaeaeee33df8317dbc81571fd842
parentdbf021a2e04e74dd7f072c927a34043fd8c3ae30 (diff)
downloadsamba-28772dfca1f9e7afd01f7ea522cb2e697c318e22.tar.gz
samba-28772dfca1f9e7afd01f7ea522cb2e697c318e22.tar.xz
samba-28772dfca1f9e7afd01f7ea522cb2e697c318e22.zip
r6235: Partial fix for bugid #2581. Ensure if realloc fails on an internal
tdb we fail gracefully. Jeremy.
-rw-r--r--source/tdb/tdb.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/source/tdb/tdb.c b/source/tdb/tdb.c
index f153e2f2582..7159550c0c2 100644
--- a/source/tdb/tdb.c
+++ b/source/tdb/tdb.c
@@ -832,9 +832,14 @@ static int tdb_expand(TDB_CONTEXT *tdb, tdb_off size)
tdb->map_size += size;
- if (tdb->flags & TDB_INTERNAL)
- tdb->map_ptr = realloc(tdb->map_ptr, tdb->map_size);
- else {
+ if (tdb->flags & TDB_INTERNAL) {
+ char *new_map_ptr = realloc(tdb->map_ptr, tdb->map_size);
+ if (!new_map_ptr) {
+ tdb->map_size -= size;
+ goto fail;
+ }
+ tdb->map_ptr = new_map_ptr;
+ } else {
/*
* We must ensure the file is remapped before adding the space
* to ensure consistency with systems like OpenBSD where