1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-04 08:22:08 +03:00

Added lock backouts on fail.

When chaining together long lines of bloody "if" statements, which should
logically be separated, and one of them allocates memory, remember to
*free* it *WHETHER OR NOT THE IF STATEMENTS SUCCEEDED* !!!!
Yes I do consider this a bug in the coding style of Tridge, Rusty, Tim et al. :-).
I'm just pissed 'cos this took 4 hours to track down even with an insure error report
stating me in the face and also Ben Woodward looking over the code with me :-).
Jeremy.
This commit is contained in:
Jeremy Allison
-
parent 69fe739303
commit 506b5e34c3
5 changed files with 43 additions and 65 deletions

View File

@ -291,7 +291,7 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
int i;
if (UNMARSHALLING(ps)) {
if (!(info1 = malloc(num_entries * sizeof(SRV_SHARE_INFO_1))))
if (!(info1 = prs_alloc_mem(ps, num_entries * sizeof(SRV_SHARE_INFO_1))))
return False;
memset(info1, '\0', num_entries * sizeof(SRV_SHARE_INFO_1));
ctr->share.info1 = info1;
@ -317,7 +317,7 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
int i;
if (UNMARSHALLING(ps)) {
if (!(info2 = malloc(num_entries * sizeof(SRV_SHARE_INFO_2))))
if (!(info2 = prs_alloc_mem(ps,num_entries * sizeof(SRV_SHARE_INFO_2))))
return False;
memset(info2, '\0', num_entries * sizeof(SRV_SHARE_INFO_2));
ctr->share.info2 = info2;
@ -345,43 +345,6 @@ static BOOL srv_io_srv_share_ctr(char *desc, SRV_SHARE_INFO_CTR *ctr, prs_struct
return True;
}
/*******************************************************************
Frees a SRV_SHARE_INFO_CTR structure.
********************************************************************/
void free_srv_share_info_ctr(SRV_SHARE_INFO_CTR *ctr)
{
if(!ctr)
return;
if(ctr->share.info)
free(ctr->share.info);
memset(ctr, '\0', sizeof(SRV_SHARE_INFO_CTR));
}
/*******************************************************************
Frees a SRV_Q_NET_SHARE_ENUM structure.
********************************************************************/
void free_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n)
{
if(!q_n)
return;
free_srv_share_info_ctr(&q_n->ctr);
memset(q_n, '\0', sizeof(SRV_Q_NET_SHARE_ENUM));
}
/*******************************************************************
Frees a SRV_R_NET_SHARE_ENUM structure.
********************************************************************/
void free_srv_r_net_share_enum(SRV_R_NET_SHARE_ENUM *r_n)
{
if(!r_n)
return;
free_srv_share_info_ctr(&r_n->ctr);
memset(r_n, '\0', sizeof(SRV_R_NET_SHARE_ENUM));
}
/*******************************************************************
Inits a SRV_Q_NET_SHARE_ENUM structure.
********************************************************************/