]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/syntax.c
fix possible uninitialized use of nmods
[openldap] / servers / slapd / syntax.c
index 21fef110ea09d58f0a9e4567a4f591a692ec79a2..f12dd14012b3b2e38c467f622a3124d9a15d61bc 100644 (file)
@@ -94,7 +94,16 @@ syn_insert(
 
        if ( ssyn->ssyn_oid ) {
                sir = (struct sindexrec *)
-                       ch_calloc( 1, sizeof(struct sindexrec) );
+                       SLAP_CALLOC( 1, sizeof(struct sindexrec) );
+               if( sir == NULL ) {
+#ifdef NEW_LOGGING
+                       LDAP_LOG( OPERATION, ERR, 
+                               "syn_insert: SLAP_CALLOC Error\n", 0, 0, 0 );
+#else
+                       Debug( LDAP_DEBUG_ANY, "SLAP_CALLOC Error\n", 0, 0, 0 );
+#endif
+                       return LDAP_OTHER;
+               }
                sir->sir_name = ssyn->ssyn_oid;
                sir->sir_syn = ssyn;
                if ( avl_insert( &syn_index, (caddr_t) sir,
@@ -120,12 +129,26 @@ syn_add(
        Syntax          *ssyn;
        int             code;
 
-       ssyn = (Syntax *) ch_calloc( 1, sizeof(Syntax) );
+       ssyn = (Syntax *) SLAP_CALLOC( 1, sizeof(Syntax) );
+       if( ssyn == NULL ) {
+#ifdef NEW_LOGGING
+               LDAP_LOG( OPERATION, ERR, 
+                       "syn_add: SLAP_CALLOC Error\n", 0, 0, 0 );
+#else
+               Debug( LDAP_DEBUG_ANY, "SLAP_CALLOC Error\n", 0, 0, 0 );
+#endif
+               return LDAP_OTHER;
+       }
 
        AC_MEMCPY( &ssyn->ssyn_syn, syn, sizeof(LDAPSyntax) );
 
        ssyn->ssyn_next = NULL;
 
+       /*
+        * note: ssyn_bvoid uses the same memory of ssyn_syn.syn_oid;
+        * ssyn_oidlen is #defined as ssyn_bvoid.bv_len
+        */
+       ssyn->ssyn_bvoid.bv_val = ssyn->ssyn_syn.syn_oid;
        ssyn->ssyn_oidlen = strlen(syn->syn_oid);
        ssyn->ssyn_flags = def->sd_flags;
        ssyn->ssyn_validate = def->sd_validate;
@@ -183,8 +206,6 @@ register_syntax(
        return( 0 );
 }
 
-#if defined( SLAPD_SCHEMA_DN )
-
 int
 syn_schema_info( Entry *e )
 {
@@ -219,10 +240,10 @@ syn_schema_info( Entry *e )
 #endif
 
 #endif
-               attr_merge( e, ad_ldapSyntaxes, vals );
+               if( attr_merge( e, ad_ldapSyntaxes, vals ) )
+                       return -1;
                ldap_memfree( vals[0].bv_val );
        }
        return 0;
 }
 
-#endif