mirror of
https://github.com/samba-team/samba.git
synced 2025-08-04 08:22:08 +03:00
r4591: - converted the other _p talloc functions to not need _p
- added #if TALLOC_DEPRECATED around the _p functions
- fixes the code that broke from the above
while doing this I fixed quite a number of places that were
incorrectly using the non type-safe talloc functions to use the type
safe ones. Some were even doing multiplies for array allocation, which
is potentially unsafe.
(This used to be commit 6e7754abd0
)
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
066134f241
commit
11ce2cfd70
@ -379,7 +379,7 @@ NTSTATUS sam_make_server_info(TALLOC_CTX *mem_ctx, void *sam_ctx,
|
||||
}
|
||||
|
||||
if (group_ret > 0 &&
|
||||
!(groupSIDs = talloc_array_p(*server_info, struct dom_sid *, group_ret))) {
|
||||
!(groupSIDs = talloc_array(*server_info, struct dom_sid *, group_ret))) {
|
||||
talloc_free(*server_info);
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -858,7 +858,7 @@ int samdb_msg_add_hashes(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg
|
||||
struct ldb_wrap *sam_ctx = ctx;
|
||||
struct ldb_val val;
|
||||
int i;
|
||||
val.data = talloc_array(mem_ctx, 16, count, __location__);
|
||||
val.data = talloc_array_size(mem_ctx, 16, count);
|
||||
val.length = count*16;
|
||||
if (!val.data) {
|
||||
return -1;
|
||||
|
@ -154,6 +154,7 @@ extern int errno;
|
||||
/* Lists, trees, caching, database... */
|
||||
#include "version.h"
|
||||
#include "xfile.h"
|
||||
#define TALLOC_DEPRECATED 1
|
||||
#include "lib/talloc/talloc.h"
|
||||
#include "nt_status.h"
|
||||
#include "structs.h"
|
||||
|
@ -229,7 +229,7 @@ ssize_t convert_string_talloc(TALLOC_CTX *ctx, charset_t from, charset_t to,
|
||||
outbuf = NULL;
|
||||
convert:
|
||||
destlen = 2 + (destlen*3);
|
||||
ob = (char *)talloc_realloc(ctx, outbuf, destlen);
|
||||
ob = talloc_realloc(ctx, outbuf, char, destlen);
|
||||
if (!ob) {
|
||||
DEBUG(0, ("convert_string_talloc: realloc failed!\n"));
|
||||
talloc_free(outbuf);
|
||||
|
@ -63,7 +63,7 @@ char *reg_val_data_string(TALLOC_CTX *mem_ctx, struct registry_value *v)
|
||||
return ret;
|
||||
|
||||
case REG_BINARY:
|
||||
ret = talloc_array(mem_ctx, 3, v->data_len+1, "REG_BINARY");
|
||||
ret = talloc_array_size(mem_ctx, 3, v->data_len+1);
|
||||
asciip = ret;
|
||||
for (i=0; i<v->data_len; i++) {
|
||||
int str_rem = v->data_len * 3 - (asciip - ret);
|
||||
|
@ -932,7 +932,7 @@ static char *talloc_vasprintf_append(char *s, const char *fmt, va_list ap)
|
||||
}
|
||||
len = vsnprintf(NULL, 0, fmt, ap2);
|
||||
|
||||
s = talloc_realloc(NULL, s, s_len + len+1);
|
||||
s = talloc_realloc(NULL, s, char, s_len + len+1);
|
||||
if (!s) return NULL;
|
||||
|
||||
VA_COPY(ap2, ap);
|
||||
@ -961,7 +961,7 @@ char *talloc_asprintf_append(char *s, const char *fmt, ...)
|
||||
/*
|
||||
alloc an array, checking for integer overflow in the array size
|
||||
*/
|
||||
void *talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name)
|
||||
void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name)
|
||||
{
|
||||
if (count >= MAX_TALLOC_SIZE/el_size) {
|
||||
return NULL;
|
||||
@ -972,7 +972,7 @@ void *talloc_array(const void *ctx, size_t el_size, unsigned count, const char *
|
||||
/*
|
||||
alloc an zero array, checking for integer overflow in the array size
|
||||
*/
|
||||
void *talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name)
|
||||
void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name)
|
||||
{
|
||||
if (count >= MAX_TALLOC_SIZE/el_size) {
|
||||
return NULL;
|
||||
@ -984,16 +984,12 @@ void *talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const c
|
||||
/*
|
||||
realloc an array, checking for integer overflow in the array size
|
||||
*/
|
||||
void *talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name)
|
||||
void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name)
|
||||
{
|
||||
if (count >= MAX_TALLOC_SIZE/el_size) {
|
||||
return NULL;
|
||||
}
|
||||
ptr = talloc_realloc(ctx, ptr, el_size * count);
|
||||
if (ptr) {
|
||||
talloc_set_name_const(ptr, name);
|
||||
}
|
||||
return ptr;
|
||||
return _talloc_realloc(ctx, ptr, el_size * count, name);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -32,17 +32,26 @@ typedef void TALLOC_CTX;
|
||||
#define __LINESTR__ _STRING_LINE2_(__LINE__)
|
||||
#define __location__ __FILE__ ":" __LINESTR__
|
||||
|
||||
#ifndef TALLOC_DEPRECATED
|
||||
#define TALLOC_DEPRECATED 0
|
||||
#endif
|
||||
|
||||
/* useful macros for creating type checked pointers */
|
||||
#define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type)
|
||||
#define talloc_p(ctx, type) talloc(ctx, type)
|
||||
#define talloc_size(ctx, size) talloc_named_const(ctx, size, __location__)
|
||||
#define talloc_zero(ctx, size) _talloc_zero(ctx, size, __location__)
|
||||
#define talloc_realloc(ctx, ptr, size) _talloc_realloc(ctx, ptr, size, __location__)
|
||||
|
||||
#define talloc_new(ctx) talloc_named_const(ctx, 0, "talloc_new: " __location__)
|
||||
#define talloc_zero_p(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type)
|
||||
#define talloc_zero_array_p(ctx, type, count) (type *)talloc_zero_array(ctx, sizeof(type), count, __location__)
|
||||
#define talloc_array_p(ctx, type, count) (type *)talloc_array(ctx, sizeof(type), count, __location__)
|
||||
#define talloc_realloc_p(ctx, p, type, count) (type *)talloc_realloc_array(ctx, p, sizeof(type), count, __location__)
|
||||
|
||||
#define talloc_zero(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type)
|
||||
#define talloc_zero_size(ctx, size) _talloc_zero(ctx, size, __location__)
|
||||
|
||||
#define talloc_zero_array(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, __location__)
|
||||
#define talloc_array(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, __location__)
|
||||
#define talloc_array_size(ctx, size, count) _talloc_array(ctx, size, count, __location__)
|
||||
|
||||
#define talloc_realloc(ctx, p, type, count) (type *)_talloc_realloc_array(ctx, p, sizeof(type), count, __location__)
|
||||
#define talloc_realloc_size(ctx, ptr, size) _talloc_realloc(ctx, ptr, size, __location__)
|
||||
|
||||
#define talloc_memdup(t, p, size) _talloc_memdup(t, p, size, __location__)
|
||||
|
||||
#define talloc_destroy(ctx) talloc_free(ctx)
|
||||
@ -54,6 +63,14 @@ typedef void TALLOC_CTX;
|
||||
#define data_blob(ptr, size) data_blob_named(ptr, size, "DATA_BLOB: "__location__)
|
||||
#define data_blob_talloc(ctx, ptr, size) data_blob_talloc_named(ctx, ptr, size, "DATA_BLOB: "__location__)
|
||||
|
||||
|
||||
#if TALLOC_DEPRECATED
|
||||
#define talloc_zero_p(ctx, type) talloc_zero(ctx, type)
|
||||
#define talloc_p(ctx, type) talloc(ctx, type)
|
||||
#define talloc_array_p(ctx, type, count) talloc_array(ctx, type, count)
|
||||
#define talloc_realloc_p(ctx, p, type, count) talloc_realloc(ctx, p, type, count)
|
||||
#endif
|
||||
|
||||
#ifndef PRINTF_ATTRIBUTE
|
||||
#define PRINTF_ATTRIBUTE(a1, a2)
|
||||
#endif
|
||||
@ -89,9 +106,9 @@ char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIB
|
||||
char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
|
||||
char *talloc_asprintf_append(char *s,
|
||||
const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
|
||||
void *talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name);
|
||||
void *talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name);
|
||||
void *talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name);
|
||||
void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name);
|
||||
void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name);
|
||||
void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name);
|
||||
void *talloc_realloc_fn(const void *context, void *ptr, size_t size);
|
||||
void *talloc_autofree_context(void);
|
||||
|
||||
|
@ -5,7 +5,7 @@ Andrew Tridgell
|
||||
September 2004
|
||||
|
||||
The most current version of this document is available at
|
||||
http://samba.org/ftp/unpacked/samba4/talloc_guide.txt
|
||||
http://samba.org/ftp/unpacked/samba4/source/lib/talloc/talloc_guide.txt
|
||||
|
||||
If you are used to talloc from Samba3 then please read this carefully,
|
||||
as talloc has changed a lot.
|
||||
@ -19,7 +19,7 @@ between a "talloc context" and a "talloc pointer". Any pointer
|
||||
returned from talloc() is itself a valid talloc context. This means
|
||||
you can do this:
|
||||
|
||||
struct foo *X = talloc_p(mem_ctx, struct foo);
|
||||
struct foo *X = talloc(mem_ctx, struct foo);
|
||||
X->name = talloc_strdup(X, "foo");
|
||||
|
||||
and the pointer X->name would be a "child" of the talloc context "X"
|
||||
@ -34,7 +34,7 @@ talloc_free().
|
||||
|
||||
If you find this confusing, then I suggest you run the LOCAL-TALLOC
|
||||
smbtorture test to watch talloc in action. You may also like to add
|
||||
your own tests to source/torture/local/talloc.c to clarify how some
|
||||
your own tests to source/lib/talloc/testsuite.c to clarify how some
|
||||
particular situation is handled.
|
||||
|
||||
|
||||
@ -270,13 +270,13 @@ particularly useful for creating a new temporary working context.
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
void *talloc_realloc(const void *context, void *ptr, size_t size);
|
||||
(type *)talloc_realloc(const void *context, void *ptr, type, count);
|
||||
|
||||
The talloc_realloc() function changes the size of a talloc
|
||||
The talloc_realloc() macro changes the size of a talloc
|
||||
pointer. It has the following equivalences:
|
||||
|
||||
talloc_realloc(context, NULL, size) ==> talloc_size(context, size);
|
||||
talloc_realloc(context, ptr, 0) ==> talloc_free(ptr);
|
||||
talloc_realloc(context, NULL, type, 1) ==> talloc(context, type);
|
||||
talloc_realloc(context, ptr, type, 0) ==> talloc_free(ptr);
|
||||
|
||||
The "context" argument is only used if "ptr" is not NULL, otherwise it
|
||||
is ignored.
|
||||
@ -286,6 +286,13 @@ will fail either due to a lack of memory, or because the pointer has
|
||||
more than one parent (see talloc_reference()).
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
void *talloc_realloc_size(const void *context, void *ptr, size_t size);
|
||||
|
||||
the talloc_realloc_size() function is useful when the type is not
|
||||
known so the typesafe talloc_realloc() cannot be used.
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
void *talloc_steal(const void *new_ctx, const void *ptr);
|
||||
|
||||
@ -403,12 +410,18 @@ full talloc report on 'root' (total 18 bytes in 8 blocks)
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
void *talloc_zero(const void *ctx, size_t size);
|
||||
(type *)talloc_zero(const void *ctx, type);
|
||||
|
||||
The talloc_zero() function is equivalent to:
|
||||
The talloc_zero() macro is equivalent to:
|
||||
|
||||
ptr = talloc_size(ctx, size);
|
||||
if (ptr) memset(ptr, 0, size);
|
||||
ptr = talloc(ctx, type);
|
||||
if (ptr) memset(ptr, 0, sizeof(type));
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
void *talloc_zero_size(const void *ctx, size_t size)
|
||||
|
||||
The talloc_zero_size() function is useful when you don't have a known type
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
@ -469,25 +482,19 @@ string to the given string.
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
void *talloc_array_p(const void *ctx, type, uint_t count);
|
||||
(type *)talloc_array(const void *ctx, type, uint_t count);
|
||||
|
||||
The talloc_array_p() macro is equivalent to:
|
||||
The talloc_array() macro is equivalent to:
|
||||
|
||||
(type *)talloc_size(ctx, sizeof(type) * count);
|
||||
|
||||
except that it provides integer overflow protection for the multiply,
|
||||
returning NULL if the multiply overflows.
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
void *talloc_realloc_p(const void *ctx, void *ptr, type, uint_t count);
|
||||
void *talloc_array_size(const void *ctx, size_t size, uint_t count);
|
||||
|
||||
The talloc_realloc_p() macro is equivalent to:
|
||||
|
||||
(type *)talloc_realloc(ctx, ptr, sizeof(type) * count);
|
||||
|
||||
except that it provides integer overflow protection for the multiply,
|
||||
returning NULL if the multiply overflows.
|
||||
The talloc_array_size() function is useful when the type is not known
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
@ -398,7 +398,7 @@ static BOOL test_misc(void)
|
||||
talloc_report(root, stdout);
|
||||
|
||||
|
||||
p2 = talloc_zero(p1, 20);
|
||||
p2 = talloc_zero_size(p1, 20);
|
||||
if (p2[19] != 0) {
|
||||
printf("Failed to give zero memory\n");
|
||||
return False;
|
||||
@ -520,41 +520,41 @@ static BOOL test_realloc(void)
|
||||
p1 = talloc_size(root, 10);
|
||||
CHECK_SIZE(p1, 10);
|
||||
|
||||
p1 = talloc_realloc(NULL, p1, 20);
|
||||
p1 = talloc_realloc_size(NULL, p1, 20);
|
||||
CHECK_SIZE(p1, 20);
|
||||
|
||||
talloc_new(p1);
|
||||
|
||||
p2 = talloc_realloc(p1, NULL, 30);
|
||||
p2 = talloc_realloc_size(p1, NULL, 30);
|
||||
|
||||
talloc_new(p1);
|
||||
|
||||
p2 = talloc_realloc(p1, p2, 40);
|
||||
p2 = talloc_realloc_size(p1, p2, 40);
|
||||
|
||||
CHECK_SIZE(p2, 40);
|
||||
CHECK_SIZE(root, 60);
|
||||
CHECK_BLOCKS(p1, 4);
|
||||
|
||||
p1 = talloc_realloc(NULL, p1, 20);
|
||||
p1 = talloc_realloc_size(NULL, p1, 20);
|
||||
CHECK_SIZE(p1, 60);
|
||||
|
||||
talloc_increase_ref_count(p2);
|
||||
if (talloc_realloc(NULL, p2, 5) != NULL) {
|
||||
if (talloc_realloc_size(NULL, p2, 5) != NULL) {
|
||||
printf("failed: talloc_realloc() on a referenced pointer should fail\n");
|
||||
return False;
|
||||
}
|
||||
CHECK_BLOCKS(p1, 4);
|
||||
|
||||
talloc_realloc(NULL, p2, 0);
|
||||
talloc_realloc(NULL, p2, 0);
|
||||
talloc_realloc_size(NULL, p2, 0);
|
||||
talloc_realloc_size(NULL, p2, 0);
|
||||
CHECK_BLOCKS(p1, 3);
|
||||
|
||||
if (talloc_realloc(NULL, p1, 0x7fffffff) != NULL) {
|
||||
if (talloc_realloc_size(NULL, p1, 0x7fffffff) != NULL) {
|
||||
printf("failed: oversize talloc should fail\n");
|
||||
return False;
|
||||
}
|
||||
|
||||
talloc_realloc(NULL, p1, 0);
|
||||
talloc_realloc_size(NULL, p1, 0);
|
||||
|
||||
CHECK_BLOCKS(root, 1);
|
||||
CHECK_SIZE(root, 0);
|
||||
|
@ -52,9 +52,9 @@ static BOOL read_negTokenInit(struct asn1_data *asn1, struct spnego_negTokenInit
|
||||
token->mechTypes = talloc_p(NULL, const char *);
|
||||
for (i = 0; !asn1->has_error &&
|
||||
0 < asn1_tag_remaining(asn1); i++) {
|
||||
token->mechTypes =
|
||||
talloc_realloc(NULL, token->mechTypes, (i + 2) *
|
||||
sizeof(*token->mechTypes));
|
||||
token->mechTypes = talloc_realloc(NULL,
|
||||
token->mechTypes,
|
||||
const char *, i+2);
|
||||
asn1_read_OID(asn1, token->mechTypes + i);
|
||||
if (token->mechTypes[i]) {
|
||||
talloc_steal(token->mechTypes,
|
||||
|
@ -81,13 +81,13 @@ static BOOL smbcli_list_new_callback(void *private, union smb_search_data *file)
|
||||
/* add file info to the dirlist pool */
|
||||
tdl = talloc_realloc(state,
|
||||
state->dirlist,
|
||||
state->dirlist_len + sizeof(struct clilist_file_info));
|
||||
|
||||
struct clilist_file_info,
|
||||
state->dirlist_len + 1);
|
||||
if (!tdl) {
|
||||
return False;
|
||||
}
|
||||
state->dirlist = tdl;
|
||||
state->dirlist_len += sizeof(struct clilist_file_info);
|
||||
state->dirlist_len++;
|
||||
|
||||
interpret_long_filename(state->info_level, file, &state->dirlist[state->total_received]);
|
||||
|
||||
@ -227,13 +227,14 @@ static BOOL smbcli_list_old_callback(void *private, union smb_search_data *file)
|
||||
/* add file info to the dirlist pool */
|
||||
tdl = talloc_realloc(state,
|
||||
state->dirlist,
|
||||
state->dirlist_len + sizeof(struct clilist_file_info));
|
||||
struct clilist_file_info,
|
||||
state->dirlist_len + 1);
|
||||
|
||||
if (!tdl) {
|
||||
return False;
|
||||
}
|
||||
state->dirlist = tdl;
|
||||
state->dirlist_len += sizeof(struct clilist_file_info);
|
||||
state->dirlist_len++;
|
||||
|
||||
interpret_short_filename(state->info_level, file, &state->dirlist[state->total_received]);
|
||||
|
||||
|
@ -52,7 +52,7 @@ static char *next_chunk(TALLOC_CTX *mem_ctx,
|
||||
if (chunk_size+1 >= alloc_size) {
|
||||
char *c2;
|
||||
alloc_size += 1024;
|
||||
c2 = talloc_realloc(mem_ctx, chunk, alloc_size);
|
||||
c2 = talloc_realloc(mem_ctx, chunk, char, alloc_size);
|
||||
if (!c2) {
|
||||
errno = ENOMEM;
|
||||
return NULL;
|
||||
|
@ -73,7 +73,7 @@ NTSTATUS smb_raw_changenotify_recv(struct smbcli_request *req,
|
||||
}
|
||||
|
||||
/* allocate array */
|
||||
parms->out.changes = talloc_array_p(mem_ctx, struct notify_changes, parms->out.num_changes);
|
||||
parms->out.changes = talloc_array(mem_ctx, struct notify_changes, parms->out.num_changes);
|
||||
if (!parms->out.changes) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -203,7 +203,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, req->out.buffer, req->out.allocated);
|
||||
buf2 = talloc_realloc(req, req->out.buffer, uint8_t, req->out.allocated);
|
||||
if (buf2 == NULL) {
|
||||
smb_panic("out of memory in req_grow_allocation");
|
||||
}
|
||||
@ -950,7 +950,7 @@ size_t smbcli_blob_append_string(struct smbcli_session *session,
|
||||
|
||||
max_len = (strlen(str)+2) * MAX_BYTES_PER_CHAR;
|
||||
|
||||
blob->data = talloc_realloc(mem_ctx, blob->data, blob->length + max_len);
|
||||
blob->data = talloc_realloc(mem_ctx, blob->data, uint8_t, blob->length + max_len);
|
||||
if (!blob->data) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -111,7 +111,7 @@ NTSTATUS smb_raw_trans2_recv(struct smbcli_request *req,
|
||||
|
||||
if (parms->out.setup_count > 0) {
|
||||
int i;
|
||||
parms->out.setup = talloc_array(mem_ctx, 2, parms->out.setup_count, "setup");
|
||||
parms->out.setup = talloc_array(mem_ctx, uint16_t, parms->out.setup_count);
|
||||
if (!parms->out.setup) {
|
||||
req->status = NT_STATUS_NO_MEMORY;
|
||||
return smbcli_request_destroy(req);
|
||||
@ -439,7 +439,7 @@ NTSTATUS smb_raw_nttrans_recv(struct smbcli_request *req,
|
||||
|
||||
if (parms->out.setup_count > 0) {
|
||||
int i;
|
||||
parms->out.setup = talloc_array(mem_ctx, 2, parms->out.setup_count, "setup");
|
||||
parms->out.setup = talloc_array(mem_ctx, uint16_t, parms->out.setup_count);
|
||||
if (!parms->out.setup) {
|
||||
req->status = NT_STATUS_NO_MEMORY;
|
||||
return smbcli_request_destroy(req);
|
||||
|
@ -33,7 +33,7 @@ BOOL asn1_write(struct 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(NULL, data->data, data->ofs+len);
|
||||
newp = talloc_realloc(NULL, data->data, uint8_t, data->ofs+len);
|
||||
if (!newp) {
|
||||
asn1_free(data);
|
||||
data->has_error = True;
|
||||
|
@ -239,7 +239,7 @@ enum ndr_err_code {
|
||||
|
||||
|
||||
#define NDR_ALLOC_N_SIZE(ndr, s, n, elsize) do { \
|
||||
(s) = talloc_array(ndr, elsize, n, __location__); \
|
||||
(s) = talloc_array_size(ndr, elsize, n); \
|
||||
if (!(s)) return ndr_pull_error(ndr, NDR_ERR_ALLOC, "Alloc %u * %u failed\n", n, elsize); \
|
||||
} while (0)
|
||||
|
||||
|
@ -173,7 +173,7 @@ NTSTATUS ndr_push_expand(struct ndr_push *ndr, uint32_t size)
|
||||
if (size > ndr->alloc_size) {
|
||||
ndr->alloc_size = size;
|
||||
}
|
||||
ndr->data = talloc_realloc(ndr, ndr->data, ndr->alloc_size);
|
||||
ndr->data = talloc_realloc(ndr, ndr->data, uint8_t, ndr->alloc_size);
|
||||
if (!ndr->data) {
|
||||
return ndr_push_error(ndr, NDR_ERR_ALLOC, "Failed to push_expand to %u",
|
||||
ndr->alloc_size);
|
||||
|
@ -811,6 +811,7 @@ static void dcerpc_request_recv_data(struct dcerpc_pipe *p,
|
||||
if (length > 0) {
|
||||
req->payload.data = talloc_realloc(req,
|
||||
req->payload.data,
|
||||
uint8_t,
|
||||
req->payload.length + length);
|
||||
if (!req->payload.data) {
|
||||
req->status = NT_STATUS_NO_MEMORY;
|
||||
|
@ -94,7 +94,7 @@ static void smb_read_callback(struct smbcli_request *req)
|
||||
}
|
||||
|
||||
/* initiate another read request, as we only got part of a fragment */
|
||||
state->data.data = talloc_realloc(state, state->data.data, frag_length);
|
||||
state->data.data = talloc_realloc(state, state->data.data, uint8_t, frag_length);
|
||||
|
||||
io->readx.in.mincnt = MIN(state->p->srv_max_xmit_frag,
|
||||
frag_length - state->received);
|
||||
|
@ -151,7 +151,7 @@ static void sock_process_recv(struct dcerpc_pipe *p)
|
||||
frag_length = dcerpc_get_frag_length(&sock->recv.data);
|
||||
|
||||
sock->recv.data.data = talloc_realloc(sock, sock->recv.data.data,
|
||||
frag_length);
|
||||
uint8_t, frag_length);
|
||||
if (sock->recv.data.data == NULL) {
|
||||
sock_dead(p, NT_STATUS_NO_MEMORY);
|
||||
return;
|
||||
|
@ -137,9 +137,9 @@ NTSTATUS pvfs_list_start(struct pvfs_state *pvfs, struct pvfs_filename *name,
|
||||
dir->no_wildcard = False;
|
||||
dir->end_of_search = False;
|
||||
dir->offset = 0;
|
||||
dir->name_cache = talloc_zero_array_p(dir,
|
||||
struct name_cache_entry,
|
||||
NAME_CACHE_SIZE);
|
||||
dir->name_cache = talloc_zero_array(dir,
|
||||
struct name_cache_entry,
|
||||
NAME_CACHE_SIZE);
|
||||
if (dir->name_cache == NULL) {
|
||||
talloc_free(dir);
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
|
@ -283,7 +283,7 @@ ssize_t pvfs_stream_write(struct pvfs_state *pvfs,
|
||||
blob = data_blob(NULL, 0);
|
||||
}
|
||||
if (count+offset > blob.length) {
|
||||
blob.data = talloc_realloc(blob.data, blob.data, count+offset);
|
||||
blob.data = talloc_realloc(blob.data, blob.data, uint8_t, count+offset);
|
||||
if (blob.data == NULL) {
|
||||
errno = ENOMEM;
|
||||
return -1;
|
||||
@ -339,7 +339,7 @@ NTSTATUS pvfs_stream_truncate(struct pvfs_state *pvfs,
|
||||
if (length <= blob.length) {
|
||||
blob.length = length;
|
||||
} else if (length > blob.length) {
|
||||
blob.data = talloc_realloc(blob.data, blob.data, length);
|
||||
blob.data = talloc_realloc(blob.data, blob.data, uint8_t, length);
|
||||
if (blob.data == NULL) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -51,7 +51,8 @@ again:
|
||||
}
|
||||
if (ret == -1 && errno == ERANGE) {
|
||||
estimated_size *= 2;
|
||||
blob->data = talloc_realloc(mem_ctx, blob->data, estimated_size);
|
||||
blob->data = talloc_realloc(mem_ctx, blob->data,
|
||||
uint8_t, estimated_size);
|
||||
if (blob->data == NULL) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -857,7 +857,9 @@ NTSTATUS dcesrv_input_process(struct dcesrv_connection *dce_conn)
|
||||
}
|
||||
|
||||
call->pkt.u.request.stub_and_verifier.data =
|
||||
talloc_realloc(call, call->pkt.u.request.stub_and_verifier.data, alloc_size);
|
||||
talloc_realloc(call,
|
||||
call->pkt.u.request.stub_and_verifier.data,
|
||||
uint8_t, alloc_size);
|
||||
if (!call->pkt.u.request.stub_and_verifier.data) {
|
||||
return dcesrv_fault(call2, DCERPC_FAULT_OTHER);
|
||||
}
|
||||
@ -920,6 +922,7 @@ NTSTATUS dcesrv_input(struct dcesrv_connection *dce_conn, const DATA_BLOB *data)
|
||||
|
||||
dce_conn->partial_input.data = talloc_realloc(dce_conn,
|
||||
dce_conn->partial_input.data,
|
||||
uint8_t,
|
||||
dce_conn->partial_input.length + data->length);
|
||||
if (!dce_conn->partial_input.data) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
|
@ -42,7 +42,7 @@ static void nttrans_setup_reply(struct smbsrv_request *req,
|
||||
{
|
||||
trans->out.setup_count = setup_count;
|
||||
if (setup_count != 0) {
|
||||
trans->out.setup = talloc_zero_array_p(req, uint16_t, setup_count);
|
||||
trans->out.setup = talloc_zero_array(req, uint16_t, setup_count);
|
||||
}
|
||||
trans->out.params = data_blob_talloc(req, NULL, param_size);
|
||||
trans->out.data = data_blob_talloc(req, NULL, data_size);
|
||||
|
@ -2377,7 +2377,7 @@ void reply_sendtxt(struct smbsrv_request *req)
|
||||
void reply_special(struct smbsrv_request *req)
|
||||
{
|
||||
uint8_t msg_type;
|
||||
uint8_t *buf = talloc_zero_array_p(req, uint8_t, 4);
|
||||
uint8_t *buf = talloc_zero_array(req, uint8_t, 4);
|
||||
|
||||
msg_type = CVAL(req->in.buffer,0);
|
||||
|
||||
|
@ -83,7 +83,8 @@ static void req_setup_chain_reply(struct smbsrv_request *req, uint_t wct, uint_t
|
||||
/* over allocate by a small amount */
|
||||
req->out.allocated = req->out.size + REQ_OVER_ALLOCATION;
|
||||
|
||||
req->out.buffer = talloc_realloc(req, req->out.buffer, req->out.allocated);
|
||||
req->out.buffer = talloc_realloc(req, req->out.buffer,
|
||||
uint8_t, req->out.allocated);
|
||||
if (!req->out.buffer) {
|
||||
smbsrv_terminate_connection(req->smb_conn, "allocation failed");
|
||||
return;
|
||||
@ -236,7 +237,7 @@ static void req_grow_allocation(struct smbsrv_request *req, uint_t new_size)
|
||||
|
||||
/* we need to realloc */
|
||||
req->out.allocated = req->out.size + delta + REQ_OVER_ALLOCATION;
|
||||
buf2 = talloc_realloc(req, req->out.buffer, req->out.allocated);
|
||||
buf2 = talloc_realloc(req, req->out.buffer, uint8_t, req->out.allocated);
|
||||
if (buf2 == NULL) {
|
||||
smb_panic("out of memory in req_grow_allocation");
|
||||
}
|
||||
|
@ -108,7 +108,8 @@ static NTSTATUS receive_smb_request(struct smbsrv_connection *smb_conn, struct t
|
||||
/* when we have a full NBT header, then allocate the packet */
|
||||
if (req->in.size == NBT_HDR_SIZE) {
|
||||
len = smb_len(req->in.buffer) + NBT_HDR_SIZE;
|
||||
req->in.buffer = talloc_realloc(req, req->in.buffer, len);
|
||||
req->in.buffer = talloc_realloc(req, req->in.buffer,
|
||||
uint8_t, len);
|
||||
if (req->in.buffer == NULL) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -42,7 +42,8 @@ static BOOL trans2_grow_data_allocation(struct smbsrv_request *req,
|
||||
if (new_size <= trans->out.data.length) {
|
||||
return True;
|
||||
}
|
||||
trans->out.data.data = talloc_realloc(req, trans->out.data.data, new_size);
|
||||
trans->out.data.data = talloc_realloc(req, trans->out.data.data,
|
||||
uint8_t, new_size);
|
||||
return (trans->out.data.data != NULL);
|
||||
}
|
||||
|
||||
@ -83,7 +84,7 @@ static void trans2_setup_reply(struct smbsrv_request *req,
|
||||
{
|
||||
trans->out.setup_count = setup_count;
|
||||
if (setup_count != 0) {
|
||||
trans->out.setup = talloc_zero_array_p(req, uint16_t, setup_count);
|
||||
trans->out.setup = talloc_zero_array(req, uint16_t, setup_count);
|
||||
}
|
||||
trans->out.params = data_blob_talloc(req, NULL, param_size);
|
||||
trans->out.data = data_blob_talloc(req, NULL, data_size);
|
||||
|
@ -1358,7 +1358,7 @@ static BOOL handler_writex(int instance)
|
||||
parm[0].writex.in.wmode = gen_bits_mask(0xFFFF);
|
||||
parm[0].writex.in.remaining = gen_io_count();
|
||||
parm[0].writex.in.count = gen_io_count();
|
||||
parm[0].writex.in.data = talloc_zero(current_op.mem_ctx, parm[0].writex.in.count);
|
||||
parm[0].writex.in.data = talloc_zero_size(current_op.mem_ctx, parm[0].writex.in.count);
|
||||
|
||||
GEN_COPY_PARM;
|
||||
GEN_SET_FNUM(writex.in.fnum);
|
||||
|
@ -35,8 +35,8 @@ BOOL torture_local_idtree(void)
|
||||
|
||||
idr = idr_init(ctx);
|
||||
|
||||
ids = talloc_zero_array_p(ctx, int, n);
|
||||
present = talloc_zero_array_p(ctx, int, n);
|
||||
ids = talloc_zero_array(ctx, int, n);
|
||||
present = talloc_zero_array(ctx, int, n);
|
||||
|
||||
for (i=0;i<n;i++) {
|
||||
ids[i] = -1;
|
||||
|
@ -82,6 +82,7 @@ static void rap_cli_push_paramdesc(struct rap_call *call, char desc)
|
||||
|
||||
call->paramdesc = talloc_realloc(call->mem_ctx,
|
||||
call->paramdesc,
|
||||
uint8_t,
|
||||
len+2);
|
||||
call->paramdesc[len] = desc;
|
||||
call->paramdesc[len+1] = '\0';
|
||||
@ -151,7 +152,7 @@ static NTSTATUS rap_pull_string(TALLOC_CTX *mem_ctx, struct ndr_pull *ndr,
|
||||
if ( string_offset + len + 1 > ndr->data_size )
|
||||
return NT_STATUS_INVALID_PARAMETER;
|
||||
|
||||
*dest = talloc_zero(mem_ctx, len+1);
|
||||
*dest = talloc_zero_size(mem_ctx, len+1);
|
||||
pull_ascii(*dest, p, len+1, len, 0);
|
||||
|
||||
return NT_STATUS_OK;
|
||||
|
@ -90,7 +90,7 @@ static BOOL test_read(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
const char *test_data = "TEST DATA";
|
||||
uint_t seed = time(NULL);
|
||||
|
||||
buf = talloc_zero(mem_ctx, maxsize);
|
||||
buf = talloc_zero_size(mem_ctx, maxsize);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
@ -214,7 +214,7 @@ static BOOL test_lockread(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
const char *test_data = "TEST DATA";
|
||||
uint_t seed = time(NULL);
|
||||
|
||||
buf = talloc_zero(mem_ctx, maxsize);
|
||||
buf = talloc_zero_size(mem_ctx, maxsize);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
@ -357,7 +357,7 @@ static BOOL test_readx(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
const char *test_data = "TEST DATA";
|
||||
uint_t seed = time(NULL);
|
||||
|
||||
buf = talloc_zero(mem_ctx, maxsize);
|
||||
buf = talloc_zero_size(mem_ctx, maxsize);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
@ -551,7 +551,7 @@ static BOOL test_readbraw(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
const char *test_data = "TEST DATA";
|
||||
uint_t seed = time(NULL);
|
||||
|
||||
buf = talloc_zero(mem_ctx, maxsize);
|
||||
buf = talloc_zero_size(mem_ctx, maxsize);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
|
@ -960,9 +960,9 @@ static BOOL test_many_dirs(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
smbcli_close(cli->tree, fnum);
|
||||
}
|
||||
|
||||
file = talloc_zero_array_p(mem_ctx, union smb_search_data, num_dirs);
|
||||
file2 = talloc_zero_array_p(mem_ctx, union smb_search_data, num_dirs);
|
||||
file3 = talloc_zero_array_p(mem_ctx, union smb_search_data, num_dirs);
|
||||
file = talloc_zero_array(mem_ctx, union smb_search_data, num_dirs);
|
||||
file2 = talloc_zero_array(mem_ctx, union smb_search_data, num_dirs);
|
||||
file3 = talloc_zero_array(mem_ctx, union smb_search_data, num_dirs);
|
||||
|
||||
printf("Search first on %d dirs\n", num_dirs);
|
||||
|
||||
|
@ -104,7 +104,7 @@ static BOOL test_write(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
uint_t seed = time(NULL);
|
||||
union smb_fileinfo finfo;
|
||||
|
||||
buf = talloc_zero(mem_ctx, maxsize);
|
||||
buf = talloc_zero_size(mem_ctx, maxsize);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
@ -221,7 +221,7 @@ static BOOL test_writex(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
uint_t seed = time(NULL);
|
||||
union smb_fileinfo finfo;
|
||||
|
||||
buf = talloc_zero(mem_ctx, maxsize);
|
||||
buf = talloc_zero_size(mem_ctx, maxsize);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
@ -397,7 +397,7 @@ static BOOL test_writeunlock(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
uint_t seed = time(NULL);
|
||||
union smb_fileinfo finfo;
|
||||
|
||||
buf = talloc_zero(mem_ctx, maxsize);
|
||||
buf = talloc_zero_size(mem_ctx, maxsize);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
@ -534,7 +534,7 @@ static BOOL test_writeclose(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
uint_t seed = time(NULL);
|
||||
union smb_fileinfo finfo;
|
||||
|
||||
buf = talloc_zero(mem_ctx, maxsize);
|
||||
buf = talloc_zero_size(mem_ctx, maxsize);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
|
@ -878,7 +878,7 @@ static BOOL samsync_handle_account(TALLOC_CTX *mem_ctx, struct samsync_state *sa
|
||||
|
||||
TEST_SEC_DESC_EQUAL(account->sdbuf, lsa, &acct_handle);
|
||||
|
||||
found_priv_in_lsa = talloc_zero_array_p(mem_ctx, BOOL, account->privilege_entries);
|
||||
found_priv_in_lsa = talloc_zero_array(mem_ctx, BOOL, account->privilege_entries);
|
||||
|
||||
e.in.handle = &acct_handle;
|
||||
|
||||
|
@ -367,7 +367,7 @@ static BOOL test_QueryMultipleValues(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
|
||||
r.in.num_values = 1;
|
||||
r.in.buffer_size = r.out.buffer_size = talloc_p(mem_ctx, uint32);
|
||||
*r.in.buffer_size = 0x20;
|
||||
r.in.buffer = r.out.buffer = talloc_zero_array_p(mem_ctx, uint8, *r.in.buffer_size);
|
||||
r.in.buffer = r.out.buffer = talloc_zero_array(mem_ctx, uint8, *r.in.buffer_size);
|
||||
|
||||
status = dcerpc_winreg_QueryMultipleValues(p, mem_ctx, &r);
|
||||
if(NT_STATUS_IS_ERR(status)) {
|
||||
|
@ -146,7 +146,7 @@ static void show_functions(const struct dcerpc_interface_table *p)
|
||||
|
||||
mem_ctx = talloc_init("ndrdump");
|
||||
|
||||
st = talloc_zero(mem_ctx, f->struct_size);
|
||||
st = talloc_zero_size(mem_ctx, f->struct_size);
|
||||
if (!st) {
|
||||
printf("Unable to allocate %d bytes\n", f->struct_size);
|
||||
exit(1);
|
||||
|
Reference in New Issue
Block a user