mirror of
https://github.com/samba-team/samba.git
synced 2025-08-04 08:22:08 +03:00
s4: Call va_end() after all va_start()/va_copy() calls.
This corrects the issues reaised in bug #6129, and some others that were not originally identified. It also accounts for some code that was in the original bug report but appears to have since been made common between S3 and S4. Thanks to Erik Hovland <erik@hovland.org> for the original bug report.
This commit is contained in:
committed by
Andrew Bartlett
parent
efe6552f0c
commit
71515ba190
@ -55,12 +55,9 @@ smbw_ref -- manipulate reference counts
|
||||
******************************************************/
|
||||
int smbw_ref(int client_fd, Ref_Count_Type type, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
/* client id values begin at SMBC_BASE_FC. */
|
||||
client_fd -= SMBC_BASE_FD;
|
||||
|
||||
va_start(ap, type);
|
||||
switch(type)
|
||||
{
|
||||
case SMBW_RCT_Increment:
|
||||
@ -73,9 +70,16 @@ int smbw_ref(int client_fd, Ref_Count_Type type, ...)
|
||||
return smbw_ref_count[client_fd];
|
||||
|
||||
case SMBW_RCT_Set:
|
||||
return (smbw_ref_count[client_fd] = va_arg(ap, int));
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
va_start(ap, type);
|
||||
ret = (smbw_ref_count[client_fd] = va_arg(ap, int));
|
||||
va_end(ap);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
/* never gets here */
|
||||
return -1;
|
||||
|
@ -107,6 +107,7 @@ void torture_comment(struct torture_context *context, const char *comment, ...)
|
||||
|
||||
va_start(ap, comment);
|
||||
tmp = talloc_vasprintf(context, comment, ap);
|
||||
va_end(ap);
|
||||
|
||||
context->results->ui_ops->comment(context, tmp);
|
||||
|
||||
@ -126,6 +127,7 @@ void torture_warning(struct torture_context *context, const char *comment, ...)
|
||||
|
||||
va_start(ap, comment);
|
||||
tmp = talloc_vasprintf(context, comment, ap);
|
||||
va_end(ap);
|
||||
|
||||
context->results->ui_ops->warning(context, tmp);
|
||||
|
||||
|
@ -71,6 +71,7 @@ bool msrpc_gen(TALLOC_CTX *mem_ctx,
|
||||
(smb_ucs2_t **)(void *)&pointers[i].data,
|
||||
s, &n);
|
||||
if (!ret) {
|
||||
va_end(ap);
|
||||
return false;
|
||||
}
|
||||
pointers[i].length = n;
|
||||
@ -84,6 +85,7 @@ bool msrpc_gen(TALLOC_CTX *mem_ctx,
|
||||
pointers, (char **)(void *)&pointers[i].data,
|
||||
s, &n);
|
||||
if (!ret) {
|
||||
va_end(ap);
|
||||
return false;
|
||||
}
|
||||
pointers[i].length = n;
|
||||
@ -99,6 +101,7 @@ bool msrpc_gen(TALLOC_CTX *mem_ctx,
|
||||
(smb_ucs2_t **)(void *)&pointers[i].data,
|
||||
s, &n);
|
||||
if (!ret) {
|
||||
va_end(ap);
|
||||
return false;
|
||||
}
|
||||
pointers[i].length = n;
|
||||
@ -192,6 +195,7 @@ bool msrpc_gen(TALLOC_CTX *mem_ctx,
|
||||
/* a helpful macro to avoid running over the end of our blob */
|
||||
#define NEED_DATA(amount) \
|
||||
if ((head_ofs + amount) > blob->length) { \
|
||||
va_end(ap); \
|
||||
return false; \
|
||||
}
|
||||
|
||||
|
@ -485,6 +485,7 @@ query_int(const struct lsqlite3_private * lsqlite3,
|
||||
|
||||
/* Format the query */
|
||||
if ((p = sqlite3_vmprintf(pSql, args)) == NULL) {
|
||||
va_end(args);
|
||||
return SQLITE_NOMEM;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user