diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-11-10 11:00:13 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:05:42 -0500 |
commit | 099d8cc9722e04f31217f883ce4420945c22ae04 (patch) | |
tree | 085676fdc541a5e0b8d3a21f228165dfb9a9aa1c /source4/lib/talloc.c | |
parent | 5805c780dc6d78c2cc4a86d07155db807a80bac7 (diff) | |
download | samba-099d8cc9722e04f31217f883ce4420945c22ae04.tar.gz samba-099d8cc9722e04f31217f883ce4420945c22ae04.tar.bz2 samba-099d8cc9722e04f31217f883ce4420945c22ae04.zip |
r3656: allow easy testing of the "realloc changes the pointer" type of problem that abartlet
recently fixed.
(This used to be commit 70e53a21f25360d3421758f5c37972ebc2337a9c)
Diffstat (limited to 'source4/lib/talloc.c')
-rw-r--r-- | source4/lib/talloc.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/source4/lib/talloc.c b/source4/lib/talloc.c index 239958258b..0b1f5b7cb5 100644 --- a/source4/lib/talloc.c +++ b/source4/lib/talloc.c @@ -40,6 +40,11 @@ #include "includes.h" #endif +/* use this to force every realloc to change the pointer, to stress test + code that might not cope */ +#define ALWAYS_REALLOC 0 + + #define MAX_TALLOC_SIZE 0x10000000 #define TALLOC_MAGIC 0xe814ec4f #define TALLOC_MAGIC_FREE 0x7faebef3 @@ -538,7 +543,15 @@ void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *n /* by resetting magic we catch users of the old memory */ tc->magic = TALLOC_MAGIC_FREE; +#if ALWAYS_REALLOC + new_ptr = malloc(size + sizeof(*tc)); + if (new_ptr) { + memcpy(new_ptr, tc, tc->size + sizeof(*tc)); + free(tc); + } +#else new_ptr = realloc(tc, size + sizeof(*tc)); +#endif if (!new_ptr) { tc->magic = TALLOC_MAGIC; return NULL; |