diff options
author | Jeremy Allison <jra@samba.org> | 2006-03-29 22:51:23 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:15:47 -0500 |
commit | 68dcff3f3a4a497a342c18844b57af14912b1570 (patch) | |
tree | bf012c10331e28df8384a84cb0f111a3332db2d4 | |
parent | e4c66fe4ca2fbc3099009c2efd5cc8f37ed3ec7e (diff) | |
download | samba-68dcff3f3a4a497a342c18844b57af14912b1570.tar.gz samba-68dcff3f3a4a497a342c18844b57af14912b1570.tar.xz samba-68dcff3f3a4a497a342c18844b57af14912b1570.zip |
r14768: Fix potential null deref coverity bugs #255, #256.
Jeremy.
(This used to be commit a40c7a0cd888dcee3cac1a41602863f54c51ef17)
-rw-r--r-- | source3/registry/reg_objects.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/source3/registry/reg_objects.c b/source3/registry/reg_objects.c index 71c2e206c71..33c2660331b 100644 --- a/source3/registry/reg_objects.c +++ b/source3/registry/reg_objects.c @@ -270,8 +270,6 @@ BOOL regval_ctr_key_exists( REGVAL_CTR *ctr, const char *value ) int regval_ctr_addvalue( REGVAL_CTR *ctr, const char *name, uint16 type, const char *data_p, size_t size ) { - REGISTRY_VALUE **ppreg; - if ( !name ) return ctr->num_values; @@ -281,17 +279,24 @@ int regval_ctr_addvalue( REGVAL_CTR *ctr, const char *name, uint16 type, /* allocate a slot in the array of pointers */ - if ( ctr->num_values == 0 ) + if ( ctr->num_values == 0 ) { ctr->values = TALLOC_P( ctr, REGISTRY_VALUE *); - else { - ppreg = TALLOC_REALLOC_ARRAY( ctr, ctr->values, REGISTRY_VALUE *, ctr->num_values+1 ); - if ( ppreg ) - ctr->values = ppreg; + } else { + ctr->values = TALLOC_REALLOC_ARRAY( ctr, ctr->values, REGISTRY_VALUE *, ctr->num_values+1 ); + } + + if (!ctr->values) { + ctr->num_values = 0; + return 0; } /* allocate a new value and store the pointer in the arrya */ ctr->values[ctr->num_values] = TALLOC_P( ctr, REGISTRY_VALUE); + if (!ctr->values[ctr->num_values]) { + ctr->num_values = 0; + return 0; + } /* init the value */ @@ -310,23 +315,27 @@ int regval_ctr_addvalue( REGVAL_CTR *ctr, const char *name, uint16 type, int regval_ctr_copyvalue( REGVAL_CTR *ctr, REGISTRY_VALUE *val ) { - REGISTRY_VALUE **ppreg; - - if ( val ) - { + if ( val ) { /* allocate a slot in the array of pointers */ - if ( ctr->num_values == 0 ) + if ( ctr->num_values == 0 ) { ctr->values = TALLOC_P( ctr, REGISTRY_VALUE *); - else { - ppreg = TALLOC_REALLOC_ARRAY( ctr, ctr->values, REGISTRY_VALUE *, ctr->num_values+1 ); - if ( ppreg ) - ctr->values = ppreg; + } else { + ctr->values = TALLOC_REALLOC_ARRAY( ctr, ctr->values, REGISTRY_VALUE *, ctr->num_values+1 ); + } + + if (!ctr->values) { + ctr->num_values = 0; + return 0; } /* allocate a new value and store the pointer in the arrya */ ctr->values[ctr->num_values] = TALLOC_P( ctr, REGISTRY_VALUE); + if (!ctr->values[ctr->num_values]) { + ctr->num_values = 0; + return 0; + } /* init the value */ @@ -411,4 +420,3 @@ char* regval_sz( REGISTRY_VALUE *val ) return data; } - |