From a113c3ca9bd5a894e2a9f6426c95cff7ec0d1b89 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga <kurt@openldap.org> Date: Tue, 4 Dec 2001 19:49:15 +0000 Subject: [PATCH] Import latest leak fix from HEAD. --- CHANGES | 1 + libraries/liblber/decode.c | 22 +++++++++------------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/CHANGES b/CHANGES index ca3c6a1af5..882aa0ae96 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,7 @@ OpenLDAP 2.0 Change Log OpenLDAP 2.0.19 Engineering Fixed -lldap cacertfile bug Fixed back-ldbm not filter indexing + Fixed back-passwd e_ndn bug Fixed slapd suffix "" bugs (ITS#1430) Fixed various memory leaks Updated slapd emfile/enfile handling diff --git a/libraries/liblber/decode.c b/libraries/liblber/decode.c index 6970826252..bf91be1f94 100644 --- a/libraries/liblber/decode.c +++ b/libraries/liblber/decode.c @@ -585,13 +585,14 @@ ber_scanf ( BerElement *ber, tag != LBER_DEFAULT && rc != LBER_DEFAULT; tag = ber_next_element( ber, &len, last ) ) { - void *save = *sss; + char **save = *sss; *sss = (char **) LBER_REALLOC( *sss, (j + 2) * sizeof(char *) ); if( *sss == NULL ) { - LBER_FREE( save ); + save[j] = NULL; + ber_memvfree( (void **) save ); rc = LBER_DEFAULT; goto breakout; } @@ -599,8 +600,7 @@ ber_scanf ( BerElement *ber, rc = ber_get_stringa( ber, &((*sss)[j]) ); j++; } - if ( j > 0 ) - (*sss)[j] = NULL; + if ( j > 0 ) (*sss)[j] = NULL; break; case 'V': /* sequence of strings + lengths */ @@ -611,13 +611,14 @@ ber_scanf ( BerElement *ber, tag != LBER_DEFAULT && rc != LBER_DEFAULT; tag = ber_next_element( ber, &len, last ) ) { - void *save = *bv; + struct berval **save = *bv; *bv = (struct berval **) LBER_REALLOC( *bv, (j + 2) * sizeof(struct berval *) ); if( *bv == NULL ) { - LBER_FREE( save ); + save[j] = NULL; + ber_bvecfree( save ); rc = LBER_DEFAULT; goto breakout; } @@ -625,8 +626,7 @@ ber_scanf ( BerElement *ber, rc = ber_get_stringal( ber, &((*bv)[j]) ); j++; } - if ( j > 0 ) - (*bv)[j] = NULL; + if ( j > 0 ) (*bv)[j] = NULL; break; case 'x': /* skip the next element - whatever it is */ @@ -734,11 +734,7 @@ breakout: case 'v': /* sequence of strings */ sss = va_arg( ap, char *** ); if ( *sss ) { - for (j = 0; (*sss)[j]; j++) { - LBER_FREE( (*sss)[j] ); - (*sss)[j] = NULL; - } - LBER_FREE( *sss ); + ber_memvfree( (void **) *sss ); *sss = NULL; } break; -- GitLab