diff options
Diffstat (limited to 'dbus/dbus-memory.c')
-rw-r--r-- | dbus/dbus-memory.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/dbus/dbus-memory.c b/dbus/dbus-memory.c index 3b59c26f..b28c6b11 100644 --- a/dbus/dbus-memory.c +++ b/dbus/dbus-memory.c @@ -317,7 +317,8 @@ source_string (BlockSource source) } static void -check_guards (void *free_block) +check_guards (void *free_block, + dbus_bool_t overwrite) { if (free_block != NULL) { @@ -364,6 +365,10 @@ check_guards (void *free_block) i += 4; } + /* set memory to anything but nul bytes */ + if (overwrite) + memset (free_block, 'g', requested_bytes); + if (failed) _dbus_assert_not_reached ("guard value corruption"); } @@ -401,7 +406,7 @@ set_guards (void *real_block, i += 4; } - check_guards (block + GUARD_START_OFFSET); + check_guards (block + GUARD_START_OFFSET, FALSE); return block + GUARD_START_OFFSET; } @@ -558,7 +563,7 @@ dbus_realloc (void *memory, size_t old_bytes; void *block; - check_guards (memory); + check_guards (memory, FALSE); block = realloc (((unsigned char*)memory) - GUARD_START_OFFSET, bytes + GUARD_EXTRA_SIZE); @@ -566,7 +571,7 @@ dbus_realloc (void *memory, old_bytes = *(dbus_uint32_t*)block; if (block && bytes >= old_bytes) /* old guards shouldn't have moved */ - check_guards (((unsigned char*)block) + GUARD_START_OFFSET); + check_guards (((unsigned char*)block) + GUARD_START_OFFSET, FALSE); return set_guards (block, bytes, SOURCE_REALLOC); } @@ -607,7 +612,7 @@ dbus_free (void *memory) #ifdef DBUS_BUILD_TESTS if (guards) { - check_guards (memory); + check_guards (memory, TRUE); if (memory) { n_blocks_outstanding -= 1; |