]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/slapi/slapi_overlay.c
Fix bug in control merging (this probably still isn't right...)
[openldap] / servers / slapd / slapi / slapi_overlay.c
index 0f54ef80ca7a7fa41725d7317a20a47de3c7ddfb..51b7bdc0d5be30d55b1485b7c857078ae135adb1 100644 (file)
@@ -174,7 +174,7 @@ slapi_over_count_controls( LDAPControl **controls )
        int                     i;
 
        if ( controls == NULL )
-               return i;
+               return 0;
 
        for ( i = 0; controls[i] != NULL; i++ )
                ;
@@ -191,16 +191,16 @@ slapi_over_merge_controls( Operation *op, SlapReply *rs )
        int                     nResControls = 0;
        int                     i;
 
-       nResControls = slapi_over_count_controls( rs->sr_ctrls );
-
        slapi_pblock_get( pb, SLAPI_RESCONTROLS, (void **)&slapiControls );
        nSlapiControls = slapi_over_count_controls( slapiControls );
 
-       if ( nResControls + nSlapiControls == 0 ) {
+       if ( nSlapiControls == 0 ) {
                /* short-circuit */
                return LDAP_SUCCESS;
        }
 
+       nResControls = slapi_over_count_controls( rs->sr_ctrls );
+
        /* XXX this is a bit tricky, rs->sr_ctrls may have been allocated on stack */
        mergedControls = (LDAPControl **)op->o_tmpalloc( ( nResControls + nSlapiControls + 1 ) *
                                                         sizeof( LDAPControl *), op->o_tmpmemctx );