diff options
author | Noam Postavsky <npostavs@gmail.com> | 2021-05-16 15:19:57 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2021-05-16 15:19:57 +0200 |
commit | 487498e497f8c6b6303bd5feeac83a5bcc2315af (patch) | |
tree | 0831b2c1c68bed4ca209d1420d238ff3aee093f9 | |
parent | 01bd4d1a824816fba34571623a65c9c1541c27e5 (diff) | |
download | emacs-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.c | 11 |
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. */ |