]> granicus.if.org Git - curl/commitdiff
openldap: check ldap_get_attribute_ber() results for NULL before using
authorDaniel Stenberg <daniel@haxx.se>
Tue, 6 Mar 2018 22:02:16 +0000 (23:02 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 12 Mar 2018 06:47:07 +0000 (07:47 +0100)
CVE-2018-1000121
Reported-by: Dario Weisser
Bug: https://curl.haxx.se/docs/adv_2018-97a2.html

lib/openldap.c

index f2ffdfe679334330d12ddadbf2d1cf19bc87d384..6927275cfea0720f0a7a98f9990c3195775f9ac3 100644 (file)
@@ -473,7 +473,7 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
 
   for(ent = ldap_first_message(li->ld, msg); ent;
     ent = ldap_next_message(li->ld, ent)) {
-    struct berval bv, *bvals, **bvp = &bvals;
+    struct berval bv, *bvals;
     int binary = 0, msgtype;
     CURLcode writeerr;
 
@@ -535,9 +535,9 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
     }
     data->req.bytecount += bv.bv_len + 5;
 
-    for(rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, bvp);
-      rc == LDAP_SUCCESS;
-      rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, bvp)) {
+    for(rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, &bvals);
+        (rc == LDAP_SUCCESS) && bvals;
+        rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, &bvals)) {
       int i;
 
       if(bv.bv_val == NULL) break;