]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid relocating buffers while libxml2 reads its text
authorEli Zaretskii <eliz@gnu.org>
Sun, 23 Oct 2016 16:52:56 +0000 (19:52 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sun, 23 Oct 2016 16:52:56 +0000 (19:52 +0300)
* src/xml.c (parse_region) [REL_ALLOC]: Freeze the ralloc arena
while libxml2 reads the current buffer's text.  (Bug#24764)

src/xml.c

index 1ef84bd917eba96e852e02fb58684ae843871df7..612b16c4c532cf76a62d9cb6be78203c81c40025 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -202,6 +202,11 @@ parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url,
     }
 
   buftext = BYTE_POS_ADDR (istart_byte);
+#ifdef REL_ALLOC
+  /* Prevent ralloc.c from relocating the current buffer while libxml2
+     functions below read its text.  */
+  r_alloc_inhibit_buffer_relocation (1);
+#endif
   if (htmlp)
     doc = htmlReadMemory ((char *)buftext,
                          iend_byte - istart_byte, burl, "utf-8",
@@ -214,6 +219,9 @@ parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url,
                         XML_PARSE_NONET|XML_PARSE_NOWARNING|
                         XML_PARSE_NOBLANKS |XML_PARSE_NOERROR);
 
+#ifdef REL_ALLOC
+  r_alloc_inhibit_buffer_relocation (0);
+#endif
   /* If the assertion below fails, malloc was called inside the above
      libxml2 functions, and ralloc.c caused relocation of buffer text,
      so we could have read from unrelated memory.  */