summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2016-10-23 19:52:56 +0300
committerEli Zaretskii <eliz@gnu.org>2016-10-23 19:52:56 +0300
commit71ca4f6a43bad06192cbc4bb8c7a2d69c179b7b0 (patch)
tree5408032b9c42392812a4ce04d8ba67f79594f882 /src
parent1b3fc8ab4960a1e6cb8d614953f2ba252155ade0 (diff)
downloademacs-71ca4f6a43bad06192cbc4bb8c7a2d69c179b7b0.tar.gz
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)
Diffstat (limited to 'src')
-rw-r--r--src/xml.c8
1 files changed, 8 insertions, 0 deletions
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. */