summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoam Postavsky <npostavs@gmail.com>2021-05-16 15:19:57 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2021-05-16 15:19:57 +0200
commit487498e497f8c6b6303bd5feeac83a5bcc2315af (patch)
tree0831b2c1c68bed4ca209d1420d238ff3aee093f9
parent01bd4d1a824816fba34571623a65c9c1541c27e5 (diff)
downloademacs-487498e497f8c6b6303bd5feeac83a5bcc2315af.tar.gz
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).
-rw-r--r--src/search.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/search.c b/src/search.c
index c757bf3d1f2..df384e1dcff 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. */