gnu: python-libxml2, itstool: Provide crash-free variants.

Fixes <https://bugs.gnu.org/37468>.

* gnu/packages/patches/python-libxml2-utf8.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/xml.scm (python-libxml2/fixed): New variable.
* gnu/packages/glib.scm (itstool/fixed): New variable.
* gnu/packages/gnome.scm (gnumeric)[native-inputs]: Use ITSTOOL/FIXED
instead of ITSTOOL.
This commit is contained in:
Ludovic Courtès 2019-09-20 12:21:19 +02:00
parent fb1d8d2baa
commit 3a2efbc867
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
5 changed files with 67 additions and 2 deletions

View File

@ -1252,6 +1252,7 @@ dist_patch_DATA = \
%D%/packages/patches/python-keras-integration-test.patch \ %D%/packages/patches/python-keras-integration-test.patch \
%D%/packages/patches/python-pyfakefs-remove-bad-test.patch \ %D%/packages/patches/python-pyfakefs-remove-bad-test.patch \
%D%/packages/patches/python-flint-includes.patch \ %D%/packages/patches/python-flint-includes.patch \
%D%/packages/patches/python-libxml2-utf8.patch \
%D%/packages/patches/python-mox3-python3.6-compat.patch \ %D%/packages/patches/python-mox3-python3.6-compat.patch \
%D%/packages/patches/python-testtools.patch \ %D%/packages/patches/python-testtools.patch \
%D%/packages/patches/python-paste-remove-timing-test.patch \ %D%/packages/patches/python-paste-remove-timing-test.patch \

View File

@ -65,6 +65,7 @@
#:use-module ((guix licenses) #:prefix license:) #:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages) #:use-module (guix packages)
#:use-module (guix utils) #:use-module (guix utils)
#:use-module (srfi srfi-1)
;; Export variables up-front to allow circular dependency with the 'xorg' ;; Export variables up-front to allow circular dependency with the 'xorg'
;; module. ;; module.
@ -495,6 +496,16 @@ information in their documents, such as whether a particular element should be
translated.") translated.")
(license license:gpl3+))) (license license:gpl3+)))
(define-public itstool/fixed
;; This variant fixes a python-libxml2 crash when processing UTF-8
;; sequences: <https://bugs.gnu.org/37468>. Since the issue is quite rare,
;; create this variant here to avoid a full rebuild.
(package/inherit
itstool
(inputs
`(("python-libxml2" ,python-libxml2/fixed)
,@(alist-delete "python-libxml2" (package-inputs itstool))))))
(define dbus-glib (define dbus-glib
(package (package
(name "dbus-glib") (name "dbus-glib")

View File

@ -2167,7 +2167,7 @@ Hints specification (EWMH).")
`(("bison" ,bison) `(("bison" ,bison)
("docbook-xml" ,docbook-xml) ("docbook-xml" ,docbook-xml)
("intltool" ,intltool) ("intltool" ,intltool)
("itstool" ,itstool) ("itstool" ,itstool/fixed) ;see <https://bugs.gnu.org/37468>
("glib:bin" ,glib "bin") ("glib:bin" ,glib "bin")
("pkg-config" ,pkg-config))) ("pkg-config" ,pkg-config)))
(home-page "http://www.gnumeric.org") (home-page "http://www.gnumeric.org")

View File

@ -0,0 +1,40 @@
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>.
--- libxml2-2.9.5.orig/python/libxml.c
+++ libxml2-2.9.5/python/libxml.c
@@ -1620,6 +1620,7 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU
PyObject *message;
PyObject *result;
char str[1000];
+ unsigned char *ptr = (unsigned char *)str;
#ifdef DEBUG_ERROR
printf("libxml_xmlErrorFuncHandler(%p, %s, ...) called\n", ctx, msg);
@@ -1636,12 +1637,20 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNU
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 = PyEval_CallObject(libxml_xmlPythonErrorFuncHandler, list);
+ /* Forget any errors caused in the error handler. */
+ PyErr_Clear();
Py_XDECREF(list);
Py_XDECREF(result);
}

View File

@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013, 2014, 2015, 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr> ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com> ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
@ -164,6 +164,7 @@ project (but it is usable outside of the Gnome platform).")
(license license:x11))) (license license:x11)))
(define-public python-libxml2 (define-public python-libxml2
;; TODO: Merge with 'python-libxml2/fixed' on the next rebuild cycle.
(package/inherit libxml2 (package/inherit libxml2
(name "python-libxml2") (name "python-libxml2")
(build-system python-build-system) (build-system python-build-system)
@ -191,6 +192,18 @@ project (but it is usable outside of the Gnome platform).")
(inputs `(("libxml2" ,libxml2))) (inputs `(("libxml2" ,libxml2)))
(synopsis "Python bindings for the libxml2 library"))) (synopsis "Python bindings for the libxml2 library")))
(define-public python-libxml2/fixed
;; This variant fixes a crash when processing UTF-8 sequences:
;; <https://bugs.gnu.org/37468>
;; TODO: Merge with 'python-libxml2' on the next rebuild cycle.
(package/inherit
python-libxml2
(version (string-append (package-version python-libxml2) "-1"))
(source (origin
(inherit (package-source libxml2))
(patches (cons (search-patch "python-libxml2-utf8.patch")
(origin-patches (package-source libxml2))))))))
(define-public python2-libxml2 (define-public python2-libxml2
(package-with-python2 python-libxml2)) (package-with-python2 python-libxml2))