diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-09-27 01:36:19 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:20 -0500 |
commit | 5b44130afad1bb1764d986de3ef0e8e04b0e7357 (patch) | |
tree | afea820fdfd1021b5ee55b2fa37ba1b32d334e46 /source4/libcli/ldap | |
parent | f095a8e748a87de9f4cde117df13e8dccd8aeaa9 (diff) | |
download | samba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.tar.gz samba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.tar.bz2 samba-5b44130afad1bb1764d986de3ef0e8e04b0e7357.zip |
r2671: we're getting too many errors caused by the talloc_realloc() API not
taking a context (so when you pass a NULL pointer you end up with
memory in a top level context). Fixed it by changing the API to take a
context. The context is only used if the pointer you are reallocing is
NULL.
(This used to be commit 8dc23821c9f54b2f13049b5e608a0cafb81aa540)
Diffstat (limited to 'source4/libcli/ldap')
-rw-r--r-- | source4/libcli/ldap/ldap.c | 7 | ||||
-rw-r--r-- | source4/libcli/ldap/ldap_ldif.c | 27 |
2 files changed, 19 insertions, 15 deletions
diff --git a/source4/libcli/ldap/ldap.c b/source4/libcli/ldap/ldap.c index a94a4f2f30..af21962265 100644 --- a/source4/libcli/ldap/ldap.c +++ b/source4/libcli/ldap/ldap.c @@ -179,9 +179,10 @@ static struct ldap_parse_tree *ldap_parse_filterlist(TALLOC_CTX *mem_ctx, while (*s && (next = ldap_parse_filter(mem_ctx, &s))) { struct ldap_parse_tree **e; - e = talloc_realloc(ret->u.list.elements, - sizeof(struct ldap_parse_tree) * - (ret->u.list.num_elements+1)); + e = talloc_realloc_p(ret, + ret->u.list.elements, + struct ldap_parse_tree *, + ret->u.list.num_elements+1); if (!e) { errno = ENOMEM; return NULL; diff --git a/source4/libcli/ldap/ldap_ldif.c b/source4/libcli/ldap/ldap_ldif.c index 2ec3b827ce..8fe50b6d08 100644 --- a/source4/libcli/ldap/ldap_ldif.c +++ b/source4/libcli/ldap/ldap_ldif.c @@ -51,7 +51,7 @@ static char *next_chunk(TALLOC_CTX *mem_ctx, if (chunk_size+1 >= alloc_size) { char *c2; alloc_size += 1024; - c2 = talloc_realloc(chunk, alloc_size); + c2 = talloc_realloc(mem_ctx, chunk, alloc_size); if (!c2) { errno = ENOMEM; return NULL; @@ -156,11 +156,12 @@ static int next_attr(char **s, const char **attr, struct ldap_val *value) } BOOL add_value_to_attrib(TALLOC_CTX *mem_ctx, struct ldap_val *value, - struct ldap_attribute *attrib) + struct ldap_attribute *attrib) { - attrib->values = talloc_realloc(attrib->values, - sizeof(*attrib->values) * - (attrib->num_values+1)); + attrib->values = talloc_realloc_p(mem_ctx, + attrib->values, + DATA_BLOB, + attrib->num_values+1); if (attrib->values == NULL) return False; @@ -175,8 +176,10 @@ BOOL add_attrib_to_array_talloc(TALLOC_CTX *mem_ctx, struct ldap_attribute **attribs, int *num_attribs) { - *attribs = talloc_realloc(*attribs, - sizeof(**attribs) * (*num_attribs+1)); + *attribs = talloc_realloc_p(mem_ctx, + *attribs, + struct ldap_attribute, + *num_attribs+1); if (*attribs == NULL) return False; @@ -207,9 +210,10 @@ static BOOL fill_add_attributes(struct ldap_message *msg, char **chunk) } if (attrib == NULL) { - r->attributes = talloc_realloc(r->attributes, - sizeof(*r->attributes) * - (r->num_attributes+1)); + r->attributes = talloc_realloc_p(msg->mem_ctx, + r->attributes, + struct ldap_attribute, + r->num_attributes+1); if (r->attributes == NULL) return False; @@ -231,8 +235,7 @@ BOOL add_mod_to_array_talloc(TALLOC_CTX *mem_ctx, struct ldap_mod **mods, int *num_mods) { - *mods = talloc_realloc(*mods, - sizeof(**mods) * ((*num_mods)+1)); + *mods = talloc_realloc_p(mem_ctx, *mods, struct ldap_mod, (*num_mods)+1); if (*mods == NULL) return False; |