emacs-diffs
[Top][All Lists]
Advanced

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

master 487498e 1/2: Remove unreliable test for match data clobbering


From: Lars Ingebrigtsen
Subject: master 487498e 1/2: Remove unreliable test for match data clobbering
Date: Sun, 16 May 2021 09:30:59 -0400 (EDT)

branch: master
commit 487498e497f8c6b6303bd5feeac83a5bcc2315af
Author: Noam Postavsky <npostavs@gmail.com>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Remove unreliable test for match data clobbering
    
    * src/search.c (Freplace_match): Don't test for change in search_regs
    start and end, this is unreliable if change hooks modify text earlier
    in the buffer (bug#35264).
---
 src/search.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/search.c b/src/search.c
index c757bf3..df384e1 100644
--- a/src/search.c
+++ b/src/search.c
@@ -2723,7 +2723,6 @@ since only regular expressions have distinguished 
subexpressions.  */)
     }
 
   newpoint = sub_start + SCHARS (newtext);
-  ptrdiff_t newstart = sub_start == sub_end ? newpoint : sub_start;
 
   /* Replace the old text with the new in the cleanest possible way.  */
   replace_range (sub_start, sub_end, newtext, 1, 0, 1, true);
@@ -2739,11 +2738,11 @@ since only regular expressions have distinguished 
subexpressions.  */)
   /* The replace_range etc. functions can trigger modification hooks
      (see signal_before_change and signal_after_change).  Try to error
      out if these hooks clobber the match data since clobbering can
-     result in confusing bugs.  Although this sanity check does not
-     catch all possible clobberings, it should catch many of them.  */
-  if (! (search_regs.num_regs == num_regs
-        && search_regs.start[sub] == newstart
-        && search_regs.end[sub] == newpoint))
+     result in confusing bugs.  We used to check for changes in
+     search_regs start and end, but that fails if modification hooks
+     remove or add text earlier in the buffer, so just check num_regs
+     now. */
+  if (search_regs.num_regs != num_regs)
     error ("Match data clobbered by buffer modification hooks");
 
   /* Put point back where it was in the text, if possible.  */



reply via email to

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