emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] emacs-25 8e84823: Revert regexp reentrancy abort patch


From: Paul Eggert
Subject: [Emacs-diffs] emacs-25 8e84823: Revert regexp reentrancy abort patch
Date: Sat, 21 Nov 2015 22:15:57 +0000

branch: emacs-25
commit 8e84823f3f06714d0668060d62456cf7e3100e6c
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    Revert regexp reentrancy abort patch
    
    Although the patch does fix Bug#21688 and prevents a core dump,
    it also makes the message-mode-propertize test fail; see:
    http://lists.gnu.org/archive/html/emacs-devel/2015-11/msg01667.html
    Perhaps someone else can come up with a better fix some day.
    * src/syntax.c (update_syntax_table_forward):
    Propertize even when truncated.
    * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
    (UPDATE_SYNTAX_TABLE_FAST): Remove.
    All callers changed back to the non-_FAST versions.
---
 src/regex.c  |   18 +++++++++---------
 src/syntax.c |    1 +
 src/syntax.h |   14 --------------
 3 files changed, 10 insertions(+), 23 deletions(-)

diff --git a/src/regex.c b/src/regex.c
index 4e00fd1..dcf2864 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -5945,12 +5945,12 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
 #ifdef emacs
                ssize_t offset = PTR_TO_OFFSET (d - 1);
                ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
-               UPDATE_SYNTAX_TABLE_FAST (charpos);
+               UPDATE_SYNTAX_TABLE (charpos);
 #endif
                GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
                s1 = SYNTAX (c1);
 #ifdef emacs
-               UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos + 1);
+               UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
 #endif
                PREFETCH_NOLIMIT ();
                GET_CHAR_AFTER (c2, d, dummy);
@@ -5987,7 +5987,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
 #ifdef emacs
              ssize_t offset = PTR_TO_OFFSET (d);
              ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
-             UPDATE_SYNTAX_TABLE_FAST (charpos);
+             UPDATE_SYNTAX_TABLE (charpos);
 #endif
              PREFETCH ();
              GET_CHAR_AFTER (c2, d, dummy);
@@ -6032,7 +6032,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
 #ifdef emacs
              ssize_t offset = PTR_TO_OFFSET (d) - 1;
              ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
-             UPDATE_SYNTAX_TABLE_FAST (charpos);
+             UPDATE_SYNTAX_TABLE (charpos);
 #endif
              GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
              s1 = SYNTAX (c1);
@@ -6047,7 +6047,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
                  PREFETCH_NOLIMIT ();
                  GET_CHAR_AFTER (c2, d, dummy);
 #ifdef emacs
-                 UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos);
+                 UPDATE_SYNTAX_TABLE_FORWARD (charpos);
 #endif
                  s2 = SYNTAX (c2);
 
@@ -6076,7 +6076,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
 #ifdef emacs
              ssize_t offset = PTR_TO_OFFSET (d);
              ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
-             UPDATE_SYNTAX_TABLE_FAST (charpos);
+             UPDATE_SYNTAX_TABLE (charpos);
 #endif
              PREFETCH ();
              c2 = RE_STRING_CHAR (d, target_multibyte);
@@ -6119,7 +6119,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
 #ifdef emacs
              ssize_t offset = PTR_TO_OFFSET (d) - 1;
              ssize_t charpos = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
-             UPDATE_SYNTAX_TABLE_FAST (charpos);
+             UPDATE_SYNTAX_TABLE (charpos);
 #endif
              GET_CHAR_BEFORE_2 (c1, d, string1, end1, string2, end2);
              s1 = SYNTAX (c1);
@@ -6134,7 +6134,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
                  PREFETCH_NOLIMIT ();
                  c2 = RE_STRING_CHAR (d, target_multibyte);
 #ifdef emacs
-                 UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos + 1);
+                 UPDATE_SYNTAX_TABLE_FORWARD (charpos + 1);
 #endif
                  s2 = SYNTAX (c2);
 
@@ -6157,7 +6157,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, 
const_re_char *string1,
            {
              ssize_t offset = PTR_TO_OFFSET (d);
              ssize_t pos1 = SYNTAX_TABLE_BYTE_TO_CHAR (offset);
-             UPDATE_SYNTAX_TABLE_FAST (pos1);
+             UPDATE_SYNTAX_TABLE (pos1);
            }
 #endif
            {
diff --git a/src/syntax.c b/src/syntax.c
index f939a76..5b0ec6d 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -514,6 +514,7 @@ update_syntax_table_forward (ptrdiff_t charpos, bool init,
     {
       eassert (NILP (object));
       eassert (charpos >= gl_state.e_property);
+      parse_sexp_propertize (charpos);
     }
   else
     {
diff --git a/src/syntax.h b/src/syntax.h
index eb154e0..06ce0ec 100644
--- a/src/syntax.h
+++ b/src/syntax.h
@@ -186,13 +186,6 @@ UPDATE_SYNTAX_TABLE_FORWARD (ptrdiff_t charpos)
                                 false, gl_state.object);
 }
 
-INLINE void
-UPDATE_SYNTAX_TABLE_FORWARD_FAST (ptrdiff_t charpos)
-{
-  if (parse_sexp_lookup_properties && charpos >= gl_state.e_property)
-    update_syntax_table (charpos + gl_state.offset, 1, false, gl_state.object);
-}
-
 /* Make syntax table state (gl_state) good for CHARPOS, assuming it is
    currently good for a position after CHARPOS.  */
 
@@ -212,13 +205,6 @@ UPDATE_SYNTAX_TABLE (ptrdiff_t charpos)
   UPDATE_SYNTAX_TABLE_FORWARD (charpos);
 }
 
-INLINE void
-UPDATE_SYNTAX_TABLE_FAST (ptrdiff_t charpos)
-{
-  UPDATE_SYNTAX_TABLE_BACKWARD (charpos);
-  UPDATE_SYNTAX_TABLE_FORWARD_FAST (charpos);
-}
-
 /* Set up the buffer-global syntax table.  */
 
 INLINE void



reply via email to

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