1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-17 03:10:58 -08:00

Yet another fix for using pointers into buffer text

* src/search.c (boyer_moore): Update pointers to buffer text
after call to set_search_regs.  (Bug#24358)
This commit is contained in:
Eli Zaretskii 2016-10-24 21:37:20 +03:00
parent 1047496722
commit 96ac0c3ebc

View file

@ -2014,13 +2014,20 @@ boyer_moore (EMACS_INT n, unsigned char *base_pat,
cursor += dirlen - i - direction; /* fix cursor */ cursor += dirlen - i - direction; /* fix cursor */
if (i + direction == 0) if (i + direction == 0)
{ {
ptrdiff_t position, start, end; ptrdiff_t position, start, end, cursor_off;
cursor -= direction; cursor -= direction;
position = pos_byte + cursor - p2 + ((direction > 0) position = pos_byte + cursor - p2 + ((direction > 0)
? 1 - len_byte : 0); ? 1 - len_byte : 0);
/* set_search_regs might call malloc, which could
cause ralloc.c relocate buffer text. We need to
update pointers into buffer text due to that. */
cursor_off = cursor - p2;
set_search_regs (position, len_byte); set_search_regs (position, len_byte);
p_limit = BYTE_POS_ADDR (limit);
p2 = BYTE_POS_ADDR (pos_byte);
cursor = p2 + cursor_off;
if (NILP (Vinhibit_changing_match_data)) if (NILP (Vinhibit_changing_match_data))
{ {