Fix issue with long lines with comments in lsearch. fixes: #894
authorNigel Metheringham <nigel@exim.org>
Wed, 14 Oct 2009 13:43:40 +0000 (13:43 +0000)
committerNigel Metheringham <nigel@exim.org>
Wed, 14 Oct 2009 13:43:40 +0000 (13:43 +0000)
doc/doc-txt/ChangeLog
src/src/lookups/lsearch.c

index 934bf2aafccba620d3d5e0d62fba01982cc87007..260825c44d7cce9e410d7eba34c0db51865bb9b8 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.566 2009/10/14 11:26:31 nm4 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.567 2009/10/14 13:43:40 nm4 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -103,6 +103,8 @@ NM/16 Bugzilla 851: Documentation example syntax fix.
 
 NM/17 Changed NOTICE file to remove references to embedded PCRE.
 
+NM/18 Bugzilla 894: Fix issue with very long lines including comments in lsearch
+
 
 Exim version 4.69
 -----------------
index 4b3c7e23353bc7de6120e5d63d949a3ae941ad71..ba2c673fadfc9c558e3af936b080f90c91b3da4b 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/lookups/lsearch.c,v 1.8 2007/01/08 10:50:19 ph10 Exp $ */
+/* $Cambridge: exim/src/src/lookups/lsearch.c,v 1.9 2009/10/14 13:43:40 nm4 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -107,6 +107,7 @@ for (last_was_eol = TRUE;
   int ptr, size;
   int p = Ustrlen(buffer);
   int linekeylength;
+  BOOL this_is_comment;
   uschar *yield;
   uschar *s = buffer;
 
@@ -255,6 +256,7 @@ for (last_was_eol = TRUE;
 
   Initialize, and copy the first segment of data. */
 
+  this_is_comment = FALSE;
   size = 100;
   ptr = 0;
   yield = store_get(size);
@@ -285,11 +287,13 @@ for (last_was_eol = TRUE;
 
     if (last_was_eol)
       {
-      if (buffer[0] == 0 || buffer[0] == '#') continue;
+      this_is_comment ||= (buffer[0] == 0 || buffer[0] == '#');
+      if (this_is_comment) continue;
       if (!isspace((uschar)buffer[0])) break;
       while (isspace((uschar)*s)) s++;
       *(--s) = ' ';
       }
+    if (this_is_comment) continue;
 
     /* Join a physical or logical line continuation onto the result string. */