Don't let gdbm allocate memory and then write it to files without clearing it first. See: https://bugzilla.redhat.com/show_bug.cgi?id=4457 diff -up gdbm-1.10/src/falloc.c.zeroheaders gdbm-1.10/src/falloc.c --- gdbm-1.10/src/falloc.c.zeroheaders 2011-11-11 11:59:11.000000000 +0100 +++ gdbm-1.10/src/falloc.c 2011-11-14 17:34:32.487604027 +0100 @@ -255,7 +255,7 @@ push_avail_block (GDBM_FILE dbf) /* Split the header block. */ - temp = (avail_block *) malloc (av_size); + temp = (avail_block *) calloc (1, av_size); if (temp == NULL) _gdbm_fatal (dbf, _("malloc error")); /* Set the size to be correct AFTER the pop_avail_block. */ temp->size = dbf->header->avail.size; diff -up gdbm-1.10/src/gdbmopen.c.zeroheaders gdbm-1.10/src/gdbmopen.c --- gdbm-1.10/src/gdbmopen.c.zeroheaders 2011-11-11 19:39:42.000000000 +0100 +++ gdbm-1.10/src/gdbmopen.c 2011-11-14 17:33:24.867608650 +0100 @@ -264,7 +264,7 @@ gdbm_open (const char *file, int block_s (dbf->header->block_size - sizeof (hash_bucket)) / sizeof (bucket_element) + 1; dbf->header->bucket_size = dbf->header->block_size; - dbf->bucket = (hash_bucket *) malloc (dbf->header->bucket_size); + dbf->bucket = (hash_bucket *) calloc (1, dbf->header->bucket_size); if (dbf->bucket == NULL) { gdbm_close (dbf); @@ -456,7 +456,7 @@ _gdbm_init_cache(GDBM_FILE dbf, size_t s for(index = 0; index < size; index++) { (dbf->bucket_cache[index]).ca_bucket - = (hash_bucket *) malloc (dbf->header->bucket_size); + = (hash_bucket *) calloc (1, dbf->header->bucket_size); if ((dbf->bucket_cache[index]).ca_bucket == NULL) { gdbm_errno = GDBM_MALLOC_ERROR;