]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug #13084 with crashes during search.
authorEli Zaretskii <eliz@gnu.org>
Tue, 11 Dec 2012 15:30:45 +0000 (17:30 +0200)
committerEli Zaretskii <eliz@gnu.org>
Tue, 11 Dec 2012 15:30:45 +0000 (17:30 +0200)
 src/search.c (search_buffer): Check the inverse translations of each
 character in pattern when the buffer being searched is unibyte.

src/ChangeLog
src/search.c

index b3c7a5e6549a0189bd2693b25c76dd9a1a7c41cb..5239559f867288caefd3ec5c58c51058a0bec729 100644 (file)
@@ -1,3 +1,9 @@
+2012-12-11  Eli Zaretskii  <eliz@gnu.org>
+
+       * search.c (search_buffer): Check the inverse translations of each
+       character in pattern when the buffer being searched is unibyte.
+       (Bug#13084)
+
 2012-12-10  Paul Eggert  <eggert@cs.ucla.edu>
 
        * fileio.c (Fvisited_file_modtime): Return (-1 ...) for nonexistent
index aacdbe33eef2fcef7d444e942f14bc96c1a03ce8..7f26601cc6941849f379df45b23e9d35925fdc14 100644 (file)
@@ -1406,7 +1406,7 @@ search_buffer (Lisp_Object string, ptrdiff_t pos, ptrdiff_t pos_byte,
          char_base = 0;
          while (--len >= 0)
            {
-             int c, translated;
+             int c, translated, inverse;
 
              /* If we got here and the RE flag is set, it's because we're
                 dealing with a regexp known to be trivial, so the backslash
@@ -1420,6 +1420,20 @@ search_buffer (Lisp_Object string, ptrdiff_t pos, ptrdiff_t pos_byte,
              c = *base_pat++;
              TRANSLATE (translated, trt, c);
              *pat++ = translated;
+             /* Check that none of C's equivalents violates the
+                assumptions of boyer_moore.  */
+             TRANSLATE (inverse, inverse_trt, c);
+             while (1)
+               {
+                 if (inverse >= 0200)
+                   {
+                     boyer_moore_ok = 0;
+                     break;
+                   }
+                 if (c == inverse)
+                   break;
+                 TRANSLATE (inverse, inverse_trt, inverse);
+               }
            }
        }