]> git.sur5r.net Git - openldap/commitdiff
Import latest leak fix from HEAD.
authorKurt Zeilenga <kurt@openldap.org>
Tue, 4 Dec 2001 19:49:15 +0000 (19:49 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Tue, 4 Dec 2001 19:49:15 +0000 (19:49 +0000)
CHANGES
libraries/liblber/decode.c

diff --git a/CHANGES b/CHANGES
index ca3c6a1af508feaa52ae1e21617412593582b0c8..882aa0ae96e68bb4c79eef3eef83c8190b61d613 100644 (file)
--- 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
index 6970826252499b7ddce9625aeb3511667c557bc0..bf91be1f94cc685f251899a08ef976c3c7ad905c 100644 (file)
@@ -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;