From: Eli Zaretskii Date: Sun, 23 Oct 2016 16:52:56 +0000 (+0300) Subject: Avoid relocating buffers while libxml2 reads its text X-Git-Tag: emacs-25.1.90~86 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=71ca4f6;p=emacs.git Avoid relocating buffers while libxml2 reads its text * src/xml.c (parse_region) [REL_ALLOC]: Freeze the ralloc arena while libxml2 reads the current buffer's text. (Bug#24764) --- diff --git a/src/xml.c b/src/xml.c index 1ef84bd917e..612b16c4c53 100644 --- 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. */