]> git.sur5r.net Git - openldap/commitdiff
Add asserts in attempt to find oc_find bug...
authorKurt Zeilenga <kurt@openldap.org>
Sat, 27 May 2000 17:05:28 +0000 (17:05 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Sat, 27 May 2000 17:05:28 +0000 (17:05 +0000)
servers/slapd/oc.c

index bee49029f409c3cc4f85253b3c64bb3f6f398daa..6fa5dcfa0a3ced7f9bd188fb6c100be2b8d5b95a 100644 (file)
@@ -205,6 +205,11 @@ oc_index_cmp(
     struct oindexrec   *oir2
 )
 {
+       assert( oir1->oir_name );
+       assert( oir1->oir_oc );
+       assert( oir2->oir_name );
+       assert( oir2->oir_oc );
+
        return (strcasecmp( oir1->oir_name, oir2->oir_name ));
 }
 
@@ -214,18 +219,27 @@ oc_index_name_cmp(
     struct oindexrec   *oir
 )
 {
+       assert( oir->oir_name );
+       assert( oir->oir_oc );
+
        return (strcasecmp( name, oir->oir_name ));
 }
 
 ObjectClass *
 oc_find( const char *ocname )
 {
-       struct oindexrec        *oir = NULL;
+       struct oindexrec        *oir;
+
+       oir = (struct oindexrec *) avl_find( oc_index, ocname,
+            (AVL_CMP) oc_index_name_cmp );
+
+       if ( oir != NULL ) {
+               assert( oir->oir_name );
+               assert( oir->oir_oc );
 
-       if ( (oir = (struct oindexrec *) avl_find( oc_index, ocname,
-            (AVL_CMP) oc_index_name_cmp )) != NULL ) {
                return( oir->oir_oc );
        }
+
        return( NULL );
 }
 
@@ -377,34 +391,51 @@ oc_insert(
                        ch_calloc( 1, sizeof(struct oindexrec) );
                oir->oir_name = soc->soc_oid;
                oir->oir_oc = soc;
+
+               assert( oir->oir_name );
+               assert( oir->oir_oc );
+
                if ( avl_insert( &oc_index, (caddr_t) oir,
                                 (AVL_CMP) oc_index_cmp,
-                                (AVL_DUP) avl_dup_error ) ) {
+                                (AVL_DUP) avl_dup_error ) )
+               {
                        *err = soc->soc_oid;
+                       ldap_memfree(oir->oir_name);
                        ldap_memfree(oir);
                        return SLAP_SCHERR_DUP_CLASS;
                }
+
                /* FIX: temporal consistency check */
-               oc_find(oir->oir_name);
+               assert( oc_find(oir->oir_name) != NULL );
        }
+
        if ( (names = soc->soc_names) ) {
                while ( *names ) {
                        oir = (struct oindexrec *)
                                ch_calloc( 1, sizeof(struct oindexrec) );
                        oir->oir_name = ch_strdup(*names);
                        oir->oir_oc = soc;
+
+                       assert( oir->oir_name );
+                       assert( oir->oir_oc );
+
                        if ( avl_insert( &oc_index, (caddr_t) oir,
                                         (AVL_CMP) oc_index_cmp,
-                                        (AVL_DUP) avl_dup_error ) ) {
+                                        (AVL_DUP) avl_dup_error ) )
+                       {
                                *err = *names;
+                               ldap_memfree(oir->oir_name);
                                ldap_memfree(oir);
                                return SLAP_SCHERR_DUP_CLASS;
                        }
+
                        /* FIX: temporal consistency check */
-                       oc_find(oir->oir_name);
+                       assert( oc_find(oir->oir_name) != NULL );
+
                        names++;
                }
        }
+
        return 0;
 }