summaryrefslogtreecommitdiff
path: root/source4/libcli
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-09-27 01:36:19 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:59:20 -0500
commit5b44130afad1bb1764d986de3ef0e8e04b0e7357 (patch)
treeafea820fdfd1021b5ee55b2fa37ba1b32d334e46 /source4/libcli
parentf095a8e748a87de9f4cde117df13e8dccd8aeaa9 (diff)
downloadsamba-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')
-rw-r--r--source4/libcli/auth/spnego_parse.c2
-rw-r--r--source4/libcli/clilist.c6
-rw-r--r--source4/libcli/ldap/ldap.c7
-rw-r--r--source4/libcli/ldap/ldap_ldif.c27
-rw-r--r--source4/libcli/raw/raweas.c2
-rw-r--r--source4/libcli/raw/rawfileinfo.c6
-rw-r--r--source4/libcli/raw/rawrequest.c4
-rw-r--r--source4/libcli/util/asn1.c2
8 files changed, 32 insertions, 24 deletions
diff --git a/source4/libcli/auth/spnego_parse.c b/source4/libcli/auth/spnego_parse.c
index 20b766a4e2..07dba61dde 100644
--- a/source4/libcli/auth/spnego_parse.c
+++ b/source4/libcli/auth/spnego_parse.c
@@ -51,7 +51,7 @@ static BOOL read_negTokenInit(ASN1_DATA *asn1, struct spnego_negTokenInit *token
for (i = 0; !asn1->has_error &&
0 < asn1_tag_remaining(asn1); i++) {
token->mechTypes =
- talloc_realloc(token->mechTypes, (i + 2) *
+ talloc_realloc(NULL, token->mechTypes, (i + 2) *
sizeof(*token->mechTypes));
asn1_read_OID(asn1, token->mechTypes + i);
if (token->mechTypes[i]) {
diff --git a/source4/libcli/clilist.c b/source4/libcli/clilist.c
index 529d4f81a3..2659e81419 100644
--- a/source4/libcli/clilist.c
+++ b/source4/libcli/clilist.c
@@ -83,7 +83,8 @@ static BOOL smbcli_list_new_callback(void *private, union smb_search_data *file)
file_info *tdl;
/* add file info to the dirlist pool */
- tdl = talloc_realloc(state->dirlist,
+ tdl = talloc_realloc(state,
+ state->dirlist,
state->dirlist_len + sizeof(struct file_info));
if (!tdl) {
@@ -225,7 +226,8 @@ static BOOL smbcli_list_old_callback(void *private, union smb_search_data *file)
file_info *tdl;
/* add file info to the dirlist pool */
- tdl = talloc_realloc(state->dirlist,
+ tdl = talloc_realloc(state,
+ state->dirlist,
state->dirlist_len + sizeof(struct file_info));
if (!tdl) {
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;
diff --git a/source4/libcli/raw/raweas.c b/source4/libcli/raw/raweas.c
index d78f10fe1a..e07fbcd288 100644
--- a/source4/libcli/raw/raweas.c
+++ b/source4/libcli/raw/raweas.c
@@ -128,7 +128,7 @@ NTSTATUS ea_pull_list(const DATA_BLOB *blob,
blob2.data = blob->data + ofs;
blob2.length = ea_size - ofs;
- *eas = talloc_realloc(*eas, sizeof(**eas) * (n+1));
+ *eas = talloc_realloc(mem_ctx, *eas, sizeof(**eas) * (n+1));
if (! *eas) return NT_STATUS_NO_MEMORY;
len = ea_pull_struct(&blob2, mem_ctx, &(*eas)[n]);
diff --git a/source4/libcli/raw/rawfileinfo.c b/source4/libcli/raw/rawfileinfo.c
index aac8f2657b..cbb666b7ce 100644
--- a/source4/libcli/raw/rawfileinfo.c
+++ b/source4/libcli/raw/rawfileinfo.c
@@ -174,8 +174,10 @@ static NTSTATUS smb_raw_info_backend(struct smbcli_session *session,
while (blob->length - ofs >= 24) {
uint_t n = parms->stream_info.out.num_streams;
parms->stream_info.out.streams =
- talloc_realloc(parms->stream_info.out.streams,
- (n+1) * sizeof(parms->stream_info.out.streams[0]));
+ talloc_realloc_p(mem_ctx,
+ parms->stream_info.out.streams,
+ struct stream_struct,
+ n+1);
if (!parms->stream_info.out.streams) {
return NT_STATUS_NO_MEMORY;
}
diff --git a/source4/libcli/raw/rawrequest.c b/source4/libcli/raw/rawrequest.c
index a94e796628..a15d681a5c 100644
--- a/source4/libcli/raw/rawrequest.c
+++ b/source4/libcli/raw/rawrequest.c
@@ -213,7 +213,7 @@ static void smbcli_req_grow_allocation(struct smbcli_request *req, uint_t new_si
/* we need to realloc */
req->out.allocated = req->out.size + delta + REQ_OVER_ALLOCATION;
- buf2 = talloc_realloc(req->out.buffer, req->out.allocated);
+ buf2 = talloc_realloc(req, req->out.buffer, req->out.allocated);
if (buf2 == NULL) {
smb_panic("out of memory in req_grow_allocation");
}
@@ -911,7 +911,7 @@ size_t smbcli_blob_append_string(struct smbcli_session *session,
max_len = (strlen(str)+2) * MAX_BYTES_PER_CHAR;
- blob->data = talloc_realloc(blob->data, blob->length + max_len);
+ blob->data = talloc_realloc(mem_ctx, blob->data, blob->length + max_len);
if (!blob->data) {
return 0;
}
diff --git a/source4/libcli/util/asn1.c b/source4/libcli/util/asn1.c
index 3dc5abc09a..4ff335399a 100644
--- a/source4/libcli/util/asn1.c
+++ b/source4/libcli/util/asn1.c
@@ -32,7 +32,7 @@ BOOL asn1_write(ASN1_DATA *data, const void *p, int len)
if (data->has_error) return False;
if (data->length < data->ofs+len) {
uint8_t *newp;
- newp = talloc_realloc(data->data, data->ofs+len);
+ newp = talloc_realloc(NULL, data->data, data->ofs+len);
if (!newp) {
asn1_free(data);
data->has_error = True;