Kaydet (Commit) 5e6c595e authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Do not call xmlCleanupParser from liblangtag

Despite its name, it is a cleanup function for libxml2 that must only be called
when the process as a whole no longer needs libxml2.  Calling it from a library
like liblangtag is not appropriate (just like liblangtag does not call
xmlInitParser, either).

In LibreOffice, this caused confusion about pthread keys for thread-local
storage (xmlCleanupParser calls pthread_key_delete, but apparently if libxml2 is
later used by unrelated code in LibreOffice again, it still uses the stale key,
and if that key is now reused via an unrelated pthread_key_create, arbitrary
crashes happen during thread termination in pthread's __nptl_deallocate_tsd).

Change-Id: I82cef8bc400d48f19eaa94f26d50d4b8589da106
üst 179a6db6
--- misc/liblangtag-0.2/liblangtag/lt-xml.c
+++ misc/build/liblangtag-0.2/liblangtag/lt-xml.c
@@ -101,8 +101,6 @@ lt_xml_read_subtag_registry(lt_xml_t *x
if (xmlparser)
xmlFreeParserCtxt(xmlparser);
- xmlCleanupParser();
-
if (err) {
if (error)
*error = g_error_copy(err);
@@ -158,8 +156,6 @@ lt_xml_read_cldr_bcp47(lt_xml_t *xml
if (xmlparser)
xmlFreeParserCtxt(xmlparser);
- xmlCleanupParser();
-
if (err) {
if (error)
*error = g_error_copy(err);
...@@ -42,6 +42,7 @@ PATCH_FILES+=liblangtag-0.2-configure.patch ...@@ -42,6 +42,7 @@ PATCH_FILES+=liblangtag-0.2-configure.patch
PATCH_FILES+=liblangtag-0.2-datadir.patch PATCH_FILES+=liblangtag-0.2-datadir.patch
PATCH_FILES+=liblangtag-0.2-msvc-warning.patch PATCH_FILES+=liblangtag-0.2-msvc-warning.patch
PATCH_FILES+=liblangtag-0.2-reg2xml-encoding-problem.patch PATCH_FILES+=liblangtag-0.2-reg2xml-encoding-problem.patch
PATCH_FILES+=liblangtag-0.2-xmlCleanupParser.patch
CONFIGURE_DIR=. CONFIGURE_DIR=.
BUILD_DIR=$(CONFIGURE_DIR) BUILD_DIR=$(CONFIGURE_DIR)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment