From 1d7bcc866591aba5788dc6c701ef8b564d09e329 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 6 Mar 2018 23:02:16 +0100 Subject: [PATCH] openldap: check ldap_get_attribute_ber() results for NULL before using CVE-2018-1000121 Reported-by: Dario Weisser Bug: https://curl.haxx.se/docs/adv_2018-97a2.html Upstream-commit: 9889db043393092e9d4b5a42720bba0b3d58deba Signed-off-by: Kamil Dudka --- lib/openldap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/openldap.c b/lib/openldap.c index 369309c..d71946d 100644 --- a/lib/openldap.c +++ b/lib/openldap.c @@ -435,7 +435,7 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf, for(ent = ldap_first_message(li->ld, result); ent; ent = ldap_next_message(li->ld, ent)) { - struct berval bv, *bvals, **bvp = &bvals; + struct berval bv, *bvals; int binary = 0, msgtype; msgtype = ldap_msgtype(ent); @@ -481,9 +481,9 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf, Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1); 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; -- 2.14.3