From fc8cd529d7801658d38d9a4fc82a8b18fe3bbcc6 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Sun, 11 Mar 2018 18:46:23 +0000 Subject: [PATCH] Fix ldap lookups for zero-length attribute value. Bug 2251 Broken-by: acec9514b1 --- doc/doc-txt/ChangeLog | 3 +++ src/src/lookups/ldap.c | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 06ed2eeb5..e4ad9f0c5 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -135,6 +135,9 @@ JH/26 Bug 2253: For logging delivery lines under PRDR, append the overall the "C=" log element. It can have useful tracking info from the destination system. Patch from Simon Arlott. +JH/27 Bug 2251: Fix ldap lookups that return a single attribute having zero- + length value. Previously this would segfault. + Exim version 4.90 ----------------- diff --git a/src/src/lookups/ldap.c b/src/src/lookups/ldap.c index 2ebe734cd..63c0edf79 100644 --- a/src/src/lookups/ldap.c +++ b/src/src/lookups/ldap.c @@ -840,13 +840,13 @@ while ((rc = ldap_result(lcp->ld, msgid, 0, timeoutptr, &result)) == result = NULL; } /* End "while" loop for multiple results */ -/* Terminate the dynamic string that we have built and reclaim unused store */ +/* Terminate the dynamic string that we have built and reclaim unused store. +In the odd case of a single attribute with zero-length value, allocate +an empty string. */ -if (data) - { - (void) string_from_gstring(data); - gstring_reset_unused(data); - } +if (!data) data = string_get(1); +(void) string_from_gstring(data); +gstring_reset_unused(data); /* Copy the last dn into eldap_dn */ -- 2.25.1