1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-11 08:23:49 +03:00

talloc returns 0xdeadbeef when asked to allocate 0 bytes

jerry
This commit is contained in:
Gerald Carter
-
parent 880e811616
commit df51dc32f6

View File

@@ -56,27 +56,37 @@ void *talloc(TALLOC_CTX *t, size_t size)
{
void *p;
size = (size + (TALLOC_ALIGN-1)) & ~(TALLOC_ALIGN-1);
if (!t->list || (t->list->total_size - t->list->alloc_size) < size) {
struct talloc_chunk *c;
size_t asize = (size + (TALLOC_CHUNK_SIZE-1)) & ~(TALLOC_CHUNK_SIZE-1);
c = (struct talloc_chunk *)malloc(sizeof(*c));
if (!c) return NULL;
c->next = t->list;
c->ptr = (void *)malloc(asize);
if (!c->ptr) {
free(c);
return NULL;
}
c->alloc_size = 0;
c->total_size = asize;
t->list = c;
if (size == 0)
{
/* debugging value used to track down
memory problems */
p = (void*)0xdeadbeef;
}
else
{
size = (size + (TALLOC_ALIGN-1)) & ~(TALLOC_ALIGN-1);
p = ((char *)t->list->ptr) + t->list->alloc_size;
t->list->alloc_size += size;
if (!t->list || (t->list->total_size - t->list->alloc_size) < size) {
struct talloc_chunk *c;
size_t asize = (size + (TALLOC_CHUNK_SIZE-1)) & ~(TALLOC_CHUNK_SIZE-1);
c = (struct talloc_chunk *)malloc(sizeof(*c));
if (!c) return NULL;
c->next = t->list;
c->ptr = (void *)malloc(asize);
if (!c->ptr) {
free(c);
return NULL;
}
c->alloc_size = 0;
c->total_size = asize;
t->list = c;
}
p = ((char *)t->list->ptr) + t->list->alloc_size;
t->list->alloc_size += size;
}
return p;
}