Upstream: https://bugzilla.gnome.org/show_bug.cgi?id=791691

From d1ea6250dd00a3b7a92b52a743ec53f7751196e5 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Sat, 16 Dec 2017 19:22:23 -0600
Subject: [PATCH] Python: if message is NULL, use Py_None instead

If the error message is malformed / invalid UTF-8, and the Python 3
binding is being used, then message may be NULL.  This will cause the
Python interpreter to crash (Segmentation fault) trying to unpack the
argument list into local variables.

This uses Py_None for message if message is NULL, so that the
interpreter does not crash.
---
 python/libxml.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/python/libxml.c b/python/libxml.c
index 5b1ff6e8..dae77b88 100644
--- a/python/libxml.c
+++ b/python/libxml.c
@@ -1640,6 +1640,10 @@ libxml_xmlErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, const char *msg,
         PyTuple_SetItem(list, 0, libxml_xmlPythonErrorFuncCtxt);
         Py_XINCREF(libxml_xmlPythonErrorFuncCtxt);
         message = libxml_charPtrConstWrap(str);
+        if (message == NULL) {
+            Py_INCREF(Py_None);
+            message = Py_None;
+        }
         PyTuple_SetItem(list, 1, message);
         result = PyEval_CallObject(libxml_xmlPythonErrorFuncHandler, list);
         Py_XDECREF(list);
-- 
2.14.1