mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
Python bindings for libxml2 are now built as part of libxml2; remove all python-libxml2 inputs for libxml2 (nearly all already had libxml2) and deprecate the package. This was done manually using git grep python-libxml2 gnu/packages to find affected packages and then check all their input fields. With the update to libxml2, we can remove all the libxml2-next* variants. This change was automated with: git grep -rl libxml2-next | xargs sed -i 's/\(libxml2-next\|libxml2-next-for-grafting\)/libxml2/g' * gnu/packages/xml.scm (libxml2): Update to 2.14.6. [arguments]<#:phases>: Add configure-python phase (from python-libxml2). [native-inputs]: Add pkg-config and python-minimal. (libxml2-next, libxml2-next/fixed, libxml2-next-for-grafting): Remove. (python-libxml2): Deprecate in favor of libxml2. Change-Id: I2976f2fde086e9bc345d661edbdc125abbb7a753
40 lines
1.4 KiB
Diff
40 lines
1.4 KiB
Diff
This patch fixes a crash in the libxml2 bindings for Python 3.x
|
|
that 'itstool' stumbles upon when processing UTF-8 data:
|
|
|
|
https://issues.guix.gnu.org/issue/37468
|
|
|
|
Patch by Jan Matejek
|
|
from <https://bugzilla.opensuse.org/show_bug.cgi?id=1065270>.
|
|
|
|
--- a/python/libxml.c
|
|
+++ b/python/libxml.c
|
|
@@ -1499,6 +1499,7 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, const char *msg,
|
|
PyObject *message;
|
|
PyObject *result;
|
|
char str[1000];
|
|
+ unsigned char *ptr = (unsigned char *)str;
|
|
|
|
if (libxml_xmlPythonErrorFuncHandler == NULL) {
|
|
va_start(ap, msg);
|
|
@@ -1510,12 +1511,20 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, const char *msg,
|
|
str[999] = 0;
|
|
va_end(ap);
|
|
|
|
+#if PY_MAJOR_VERSION >= 3
|
|
+ /* Ensure the error string doesn't start at UTF8 continuation. */
|
|
+ while (*ptr && (*ptr & 0xc0) == 0x80)
|
|
+ ptr++;
|
|
+#endif
|
|
+
|
|
list = PyTuple_New(2);
|
|
PyTuple_SetItem(list, 0, libxml_xmlPythonErrorFuncCtxt);
|
|
Py_XINCREF(libxml_xmlPythonErrorFuncCtxt);
|
|
- message = libxml_charPtrConstWrap(str);
|
|
+ message = libxml_charPtrConstWrap(ptr);
|
|
PyTuple_SetItem(list, 1, message);
|
|
result = PyObject_CallObject(libxml_xmlPythonErrorFuncHandler, list);
|
|
+ /* Forget any errors caused in the error handler. */
|
|
+ PyErr_Clear();
|
|
Py_XDECREF(list);
|
|
Py_XDECREF(result);
|
|
}
|