summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/doc-txt/ChangeLog3
-rw-r--r--src/src/lookups/ldap.c12
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 */