]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
openldap: fix for NULL return from ldap_get_attribute_ber()
authorHoward Chu <hyc@symas.com>
Sun, 18 Mar 2018 18:13:27 +0000 (18:13 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 23 Mar 2018 22:58:25 +0000 (23:58 +0100)
Closes #2399

lib/openldap.c

index 187c89994799c0ebb08dbd546effa14dad6a1535..c6cb79434363e7222169806f814a2ac5f7b7a88a 100644 (file)
@@ -536,7 +536,7 @@ 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, &bvals);
-        (rc == LDAP_SUCCESS) && bvals;
+        rc == LDAP_SUCCESS;
         rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, &bvals)) {
       int i;
 
@@ -548,6 +548,27 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
       else
         binary = 0;
 
+      if(bvals == NULL) {
+        writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
+        if(writeerr) {
+          *err = writeerr;
+          return -1;
+        }
+        writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val,
+                                     bv.bv_len);
+        if(writeerr) {
+          *err = writeerr;
+          return -1;
+        }
+        writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)":\n", 2);
+        if(writeerr) {
+          *err = writeerr;
+          return -1;
+        }
+        data->req.bytecount += bv.bv_len + 3;
+        continue;
+      }
+
       for(i = 0; bvals[i].bv_val != NULL; i++) {
         int binval = 0;
         writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);