]> git.sur5r.net Git - openldap/commitdiff
Fix null pointer reference (coverity scan) and freed pointer reference
authorHoward Chu <hyc@openldap.org>
Fri, 18 Aug 2006 01:37:21 +0000 (01:37 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 18 Aug 2006 01:37:21 +0000 (01:37 +0000)
servers/slapd/overlays/constraint.c

index 447a48b6f4f27240ee9b87da41e8080d90d6fc62..7f33dd1cb3f63570ba1f81dfd00fc86a6609805f 100644 (file)
@@ -137,32 +137,24 @@ constraint_cf_gen( ConfigArgs *c )
                         
                         on->on_bi.bi_private = NULL;
                     } else {
-                        constraint *cpp;
+                        constraint **cpp;
                         
                             /* zap constraint numbered 'valx' */
-                        for(i=0, cp = cn, cpp = NULL;
+                        for(i=0, cp = cn, cpp = &cn;
                             (cp) && (i<c->valx);
-                            i++, cpp = cp, cp=cp->ap_next);
+                            i++, cpp = &cp->ap_next, cp = *cpp);
 
-                        if (cpp) {
+                        if (cp) {
                                 /* zap cp, and join cpp to cp->ap_next */
-                            cpp->ap_next = cp->ap_next;
+                            *cpp = cp->ap_next;
                             if (cp->re) {
                                 regfree(cp->re);
                                 ch_free(cp->re);
                             }
                             if (cp->re_str) ch_free(cp->re_str);
                             ch_free(cp);
-                        } else {
-                                /* zap the list head */
-                            if (cn->re) {
-                                regfree(cn->re);
-                                ch_free(cn->re);
-                            }
-                            if (cn->re_str) ch_free(cn->re_str);
-                            ch_free(cn);
-                            on->on_bi.bi_private = cn->ap_next;
                         }
+                        on->on_bi.bi_private = cn;
                     }
                     
                     break;