]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/sets.c
don't return entry if requested attr is not present (ITS#5650)
[openldap] / servers / slapd / sets.c
index d7c56fa9ed4b41f2726b389f8ef3cb853f4949a2..52f23306eff96c8852a1c72b388b59875410b1b3 100644 (file)
@@ -200,6 +200,7 @@ slap_set_join(
                                                        cp->set_op->o_tmpfree( rset[ i ].bv_val, cp->set_op->o_tmpmemctx );
                                                        rset[ i ] = rset[ --rlast ];
                                                        BER_BVZERO( &rset[ rlast ] );
+                                                       i--;
                                                }
                                                exists = 1;
                                                break;
@@ -725,6 +726,7 @@ slap_set_filter( SLAP_SET_GATHER gatherer,
                        if ( len == 4
                                && memcmp( "this", filter, len ) == 0 )
                        {
+                               assert( !BER_BVISNULL( target ) );
                                if ( ( SF_TOP() == (void *)'/' ) || IS_SET( SF_TOP() ) ) {
                                        SF_ERROR( syntax );
                                }
@@ -745,15 +747,15 @@ slap_set_filter( SLAP_SET_GATHER gatherer,
                                if ( ( SF_TOP() == (void *)'/' ) || IS_SET( SF_TOP() ) ) {
                                        SF_ERROR( syntax );
                                }
+                               if ( BER_BVISNULL( user ) ) {
+                                       SF_ERROR( memory );
+                               }
                                set = cp->set_op->o_tmpcalloc( 2, sizeof( struct berval ),
                                                cp->set_op->o_tmpmemctx );
                                if ( set == NULL ) {
                                        SF_ERROR( memory );
                                }
                                ber_dupbv_x( set, user, cp->set_op->o_tmpmemctx );
-                               if ( BER_BVISNULL( set ) ) {
-                                       SF_ERROR( memory );
-                               }
                                BER_BVZERO( &set[ 1 ] );
                                
                        } else if ( SF_TOP() != (void *)'/' ) {