emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/emacs-24 r111021: Fix bug #13084 with crash


From: Eli Zaretskii
Subject: [Emacs-diffs] /srv/bzr/emacs/emacs-24 r111021: Fix bug #13084 with crashes during search.
Date: Tue, 11 Dec 2012 17:30:45 +0200
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 111021
fixes bug: http://debbugs.gnu.org/13084
committer: Eli Zaretskii <address@hidden>
branch nick: emacs-24
timestamp: Tue 2012-12-11 17:30:45 +0200
message:
  Fix bug #13084 with crashes during search.
  
   src/search.c (search_buffer): Check the inverse translations of each
   character in pattern when the buffer being searched is unibyte.
modified:
  src/ChangeLog
  src/search.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-12-10 23:16:28 +0000
+++ b/src/ChangeLog     2012-12-11 15:30:45 +0000
@@ -1,3 +1,9 @@
+2012-12-11  Eli Zaretskii  <address@hidden>
+
+       * 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  <address@hidden>
 
        * fileio.c (Fvisited_file_modtime): Return (-1 ...) for nonexistent

=== modified file 'src/search.c'
--- a/src/search.c      2012-10-10 20:09:47 +0000
+++ b/src/search.c      2012-12-11 15:30:45 +0000
@@ -1406,7 +1406,7 @@
          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 @@
              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);
+               }
            }
        }
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]