]> git.eshelyaron.com Git - emacs.git/commitdiff
Yet another fix for using pointers into buffer text
authorEli Zaretskii <eliz@gnu.org>
Mon, 24 Oct 2016 18:37:20 +0000 (21:37 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 24 Oct 2016 18:37:20 +0000 (21:37 +0300)
* src/search.c (boyer_moore): Update pointers to buffer text
after call to set_search_regs.  (Bug#24358)

src/search.c

index f8acd40fa0812c2643d1ef031966da870c66d028..b50e7f032d51b6855b3a73d5eb6b14ac464a792e 100644 (file)
@@ -2014,13 +2014,20 @@ boyer_moore (EMACS_INT n, unsigned char *base_pat,
              cursor += dirlen - i - direction; /* fix cursor */
              if (i + direction == 0)
                {
-                 ptrdiff_t position, start, end;
+                 ptrdiff_t position, start, end, cursor_off;
 
                  cursor -= direction;
 
                  position = pos_byte + cursor - p2 + ((direction > 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);
+                 p_limit = BYTE_POS_ADDR (limit);
+                 p2 = BYTE_POS_ADDR (pos_byte);
+                 cursor = p2 + cursor_off;
 
                  if (NILP (Vinhibit_changing_match_data))
                    {