X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foverlays%2Fpcache.c;h=6875b19fa7a62a1cbc0ab2244e1cbd58083c947d;hb=6da3e3473c4c93e24c75dbff56ff1d21c89a9a18;hp=4fc84cdaf5db5cce4219be6d3920993a09602b56;hpb=8b90f05b595831e970c18bbd97bd682167941e71;p=openldap diff --git a/servers/slapd/overlays/pcache.c b/servers/slapd/overlays/pcache.c index 4fc84cdaf5..6875b19fa7 100644 --- a/servers/slapd/overlays/pcache.c +++ b/servers/slapd/overlays/pcache.c @@ -1352,14 +1352,16 @@ nextpass: eqpass = 1; switch (fs->f_choice) { case LDAP_FILTER_OR: case LDAP_FILTER_AND: + if ( fs->f_next ) { + /* save our stack position */ + fsp = op->o_tmpalloc(sizeof(fstack), op->o_tmpmemctx); + fsp->fs_next = stack; + fsp->fs_fs = fs->f_next; + fsp->fs_fi = fi->f_next; + stack = fsp; + } fs = fs->f_and; fi = fi->f_and; - /* save our stack position */ - fsp = op->o_tmpalloc(sizeof(fstack), op->o_tmpmemctx); - fsp->fs_next = stack; - fsp->fs_fs = fs->f_next; - fsp->fs_fi = fi->f_next; - stack = fsp; res=1; break; case LDAP_FILTER_SUBSTRINGS: @@ -1408,6 +1410,7 @@ nextpass: eqpass = 1; break; } if (!fs && !fi && stack) { + /* pop the stack */ fsp = stack; stack = fsp->fs_next; fs = fsp->fs_fs;