Compare commits
60 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
11da0f3a63 | ||
|
|
b2351e3e34 | ||
|
|
1fd88c3632 | ||
|
|
86d492aea6 | ||
|
|
d4c3d0bb6c | ||
|
|
cd4ee3066f | ||
|
|
adc8d24589 | ||
|
|
544488770a | ||
|
|
6df45dce8b | ||
|
|
b9a077ae03 | ||
|
|
b928096276 | ||
|
|
c1103ff3c3 | ||
|
|
f75dd54e14 | ||
|
|
b52ea727c7 | ||
|
|
afcfecf47d | ||
|
|
61d79bae8d | ||
|
|
27c594a8e2 | ||
|
|
58ac417c3e | ||
|
|
39e20da595 | ||
|
|
9579799168 | ||
|
|
dbf7e6096c | ||
|
|
85c8c3f227 | ||
|
|
23cd3c2e48 | ||
|
|
0f51029568 | ||
|
|
009f7659b7 | ||
|
|
e38670104e | ||
|
|
3a10d475bb | ||
|
|
db11b56656 | ||
|
|
63254d5e35 | ||
|
|
e20963f4cf | ||
|
|
9fac0d5501 | ||
|
|
3b50336b27 | ||
|
|
55f5648cc5 | ||
|
|
9a245c1e0c | ||
|
|
79d3d026da | ||
|
|
4452ba9aa0 | ||
|
|
3c925c366d | ||
|
|
0e1ee829e6 | ||
|
|
1a4b58646c | ||
|
|
a1fda59562 | ||
|
|
4391bca196 | ||
|
|
9d95f5a04e | ||
|
|
af2ab59687 | ||
|
|
e3db9bc24a | ||
|
|
26d49d1f7e | ||
|
|
1c38e85b1f | ||
|
|
7b1e5f9aab | ||
|
|
9c1438f59e | ||
|
|
8cd3405121 | ||
|
|
0a54307e77 | ||
|
|
eb057e7afa | ||
|
|
e45c54553a | ||
|
|
e79be2c17a | ||
|
|
e82cceb573 | ||
|
|
d8ab550c3c | ||
|
|
6659c59618 | ||
|
|
f7a9cbe29f | ||
|
|
36529bc549 | ||
|
|
d714fa326e | ||
|
|
343c16cba5 |
11 changed files with 1774 additions and 1801 deletions
1
.fmf/version
Normal file
1
.fmf/version
Normal file
|
|
@ -0,0 +1 @@
|
|||
1
|
||||
16
.gitignore
vendored
16
.gitignore
vendored
|
|
@ -57,3 +57,19 @@ lxml-2.2.7.tar.gz.asc
|
|||
/lxml-4.6.2.tar.gz
|
||||
/lxml-4.6.3.tar.gz
|
||||
/lxml-4.7.1.tar.gz
|
||||
/lxml-4.9.1.tar.gz
|
||||
/lxml-4.9.2.tar.gz
|
||||
/lxml-4.9.2-no-isoschematron.tar.gz
|
||||
/lxml-4.9.2-no-isoschematron-rng.tar.gz
|
||||
/lxml-4.9.3-no-isoschematron-rng.tar.gz
|
||||
/lxml-4.9.4-no-isoschematron-rng.tar.gz
|
||||
/lxml-5.1.0-no-isoschematron-rng.tar.gz
|
||||
/lxml-5.2.0-no-isoschematron-rng.tar.gz
|
||||
/lxml-5.2.1-no-isoschematron-rng.tar.gz
|
||||
/lxml-5.3.0-no-isoschematron-rng.tar.gz
|
||||
/lxml-5.3.1-no-isoschematron-rng.tar.gz
|
||||
/lxml-5.3.2-no-isoschematron-rng.tar.gz
|
||||
/lxml-5.4.0-no-isoschematron-rng.tar.gz
|
||||
/lxml-6.0.0-no-isoschematron-rng.tar.gz
|
||||
/lxml-6.0.1-no-isoschematron-rng.tar.gz
|
||||
/lxml-6.0.2-no-isoschematron-rng.tar.gz
|
||||
|
|
|
|||
|
|
@ -1,186 +0,0 @@
|
|||
From 85b664e506d73780232c256b6dfbaf1f266cdabd Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Behnel <stefan_ml@behnel.de>
|
||||
Date: Fri, 1 Jul 2022 21:06:10 +0200
|
||||
Subject: [PATCH 1/3] Fix a crash when incorrect parser input occurs together
|
||||
with usages of iterwalk() on trees generated by the same parser.
|
||||
|
||||
---
|
||||
src/lxml/apihelpers.pxi | 7 ++++---
|
||||
src/lxml/iterparse.pxi | 11 ++++++-----
|
||||
src/lxml/tests/test_etree.py | 20 ++++++++++++++++++++
|
||||
3 files changed, 30 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/lxml/apihelpers.pxi b/src/lxml/apihelpers.pxi
|
||||
index 5eb3416..88a031d 100644
|
||||
--- a/src/lxml/apihelpers.pxi
|
||||
+++ b/src/lxml/apihelpers.pxi
|
||||
@@ -246,9 +246,10 @@ cdef dict _build_nsmap(xmlNode* c_node):
|
||||
while c_node is not NULL and c_node.type == tree.XML_ELEMENT_NODE:
|
||||
c_ns = c_node.nsDef
|
||||
while c_ns is not NULL:
|
||||
- prefix = funicodeOrNone(c_ns.prefix)
|
||||
- if prefix not in nsmap:
|
||||
- nsmap[prefix] = funicodeOrNone(c_ns.href)
|
||||
+ if c_ns.prefix or c_ns.href:
|
||||
+ prefix = funicodeOrNone(c_ns.prefix)
|
||||
+ if prefix not in nsmap:
|
||||
+ nsmap[prefix] = funicodeOrNone(c_ns.href)
|
||||
c_ns = c_ns.next
|
||||
c_node = c_node.parent
|
||||
return nsmap
|
||||
diff --git a/src/lxml/iterparse.pxi b/src/lxml/iterparse.pxi
|
||||
index 4c20506..3da7485 100644
|
||||
--- a/src/lxml/iterparse.pxi
|
||||
+++ b/src/lxml/iterparse.pxi
|
||||
@@ -419,7 +419,7 @@ cdef int _countNsDefs(xmlNode* c_node):
|
||||
count = 0
|
||||
c_ns = c_node.nsDef
|
||||
while c_ns is not NULL:
|
||||
- count += 1
|
||||
+ count += (c_ns.href is not NULL)
|
||||
c_ns = c_ns.next
|
||||
return count
|
||||
|
||||
@@ -430,9 +430,10 @@ cdef int _appendStartNsEvents(xmlNode* c_node, list event_list) except -1:
|
||||
count = 0
|
||||
c_ns = c_node.nsDef
|
||||
while c_ns is not NULL:
|
||||
- ns_tuple = (funicode(c_ns.prefix) if c_ns.prefix is not NULL else '',
|
||||
- funicode(c_ns.href))
|
||||
- event_list.append( (u"start-ns", ns_tuple) )
|
||||
- count += 1
|
||||
+ if c_ns.href:
|
||||
+ ns_tuple = (funicodeOrEmpty(c_ns.prefix),
|
||||
+ funicode(c_ns.href))
|
||||
+ event_list.append( (u"start-ns", ns_tuple) )
|
||||
+ count += 1
|
||||
c_ns = c_ns.next
|
||||
return count
|
||||
diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py
|
||||
index ef5c54b..7b85596 100644
|
||||
--- a/src/lxml/tests/test_etree.py
|
||||
+++ b/src/lxml/tests/test_etree.py
|
||||
@@ -1459,6 +1459,26 @@ class ETreeOnlyTestCase(HelperTestCase):
|
||||
[1,2,1,4],
|
||||
counts)
|
||||
|
||||
+ def test_walk_after_parse_failure(self):
|
||||
+ # This used to be an issue because libxml2 can leak empty namespaces
|
||||
+ # between failed parser runs. iterwalk() failed to handle such a tree.
|
||||
+ try:
|
||||
+ etree.XML('''<anot xmlns="1">''')
|
||||
+ except etree.XMLSyntaxError:
|
||||
+ pass
|
||||
+ else:
|
||||
+ assert False, "invalid input did not fail to parse"
|
||||
+
|
||||
+ et = etree.XML('''<root> </root>''')
|
||||
+ try:
|
||||
+ ns = next(etree.iterwalk(et, events=('start-ns',)))
|
||||
+ except StopIteration:
|
||||
+ # This would be the expected result, because there was no namespace
|
||||
+ pass
|
||||
+ else:
|
||||
+ # This is a bug in libxml2
|
||||
+ assert not ns, repr(ns)
|
||||
+
|
||||
def test_itertext_comment_pi(self):
|
||||
# https://bugs.launchpad.net/lxml/+bug/1844674
|
||||
XML = self.etree.XML
|
||||
--
|
||||
2.37.2
|
||||
|
||||
|
||||
From c26503461af4c250fc6e771887fae7f9dd208e9b Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Behnel <stefan_ml@behnel.de>
|
||||
Date: Fri, 1 Jul 2022 21:19:44 +0200
|
||||
Subject: [PATCH 2/3] Prevent parse failure in new test from leaking into later
|
||||
test runs.
|
||||
|
||||
---
|
||||
src/lxml/tests/test_etree.py | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py
|
||||
index 7b85596..8171e03 100644
|
||||
--- a/src/lxml/tests/test_etree.py
|
||||
+++ b/src/lxml/tests/test_etree.py
|
||||
@@ -1462,14 +1462,16 @@ class ETreeOnlyTestCase(HelperTestCase):
|
||||
def test_walk_after_parse_failure(self):
|
||||
# This used to be an issue because libxml2 can leak empty namespaces
|
||||
# between failed parser runs. iterwalk() failed to handle such a tree.
|
||||
+ parser = etree.XMLParser()
|
||||
+
|
||||
try:
|
||||
- etree.XML('''<anot xmlns="1">''')
|
||||
+ etree.XML('''<anot xmlns="1">''', parser=parser)
|
||||
except etree.XMLSyntaxError:
|
||||
pass
|
||||
else:
|
||||
assert False, "invalid input did not fail to parse"
|
||||
|
||||
- et = etree.XML('''<root> </root>''')
|
||||
+ et = etree.XML('''<root> </root>''', parser=parser)
|
||||
try:
|
||||
ns = next(etree.iterwalk(et, events=('start-ns',)))
|
||||
except StopIteration:
|
||||
--
|
||||
2.37.2
|
||||
|
||||
|
||||
From 2e37fbe5c54a188394aa066c3074ab974f6b9f61 Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Behnel <stefan_ml@behnel.de>
|
||||
Date: Tue, 19 Jul 2022 08:25:20 +0200
|
||||
Subject: [PATCH 3/3] Work around libxml2 bug in affected versions that failed
|
||||
to reset the namespace count in the parser context.
|
||||
|
||||
See https://gitlab.gnome.org/GNOME/libxml2/-/issues/378
|
||||
---
|
||||
src/lxml/includes/xmlparser.pxd | 1 +
|
||||
src/lxml/parser.pxi | 3 +++
|
||||
src/lxml/tests/test_etree.py | 3 +--
|
||||
3 files changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/lxml/includes/xmlparser.pxd b/src/lxml/includes/xmlparser.pxd
|
||||
index a196e34..45acfc8 100644
|
||||
--- a/src/lxml/includes/xmlparser.pxd
|
||||
+++ b/src/lxml/includes/xmlparser.pxd
|
||||
@@ -144,6 +144,7 @@ cdef extern from "libxml/parser.h":
|
||||
void* userData
|
||||
int* spaceTab
|
||||
int spaceMax
|
||||
+ int nsNr
|
||||
bint html
|
||||
bint progressive
|
||||
int inSubset
|
||||
diff --git a/src/lxml/parser.pxi b/src/lxml/parser.pxi
|
||||
index 35b5145..3187a38 100644
|
||||
--- a/src/lxml/parser.pxi
|
||||
+++ b/src/lxml/parser.pxi
|
||||
@@ -569,6 +569,9 @@ cdef class _ParserContext(_ResolverContext):
|
||||
self._c_ctxt.disableSAX = 0 # work around bug in libxml2
|
||||
else:
|
||||
xmlparser.xmlClearParserCtxt(self._c_ctxt)
|
||||
+ # work around bug in libxml2 [2.9.10 .. 2.9.14]:
|
||||
+ # https://gitlab.gnome.org/GNOME/libxml2/-/issues/378
|
||||
+ self._c_ctxt.nsNr = 0
|
||||
|
||||
cdef int prepare(self, bint set_document_loader=True) except -1:
|
||||
cdef int result
|
||||
diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py
|
||||
index 8171e03..d767cfb 100644
|
||||
--- a/src/lxml/tests/test_etree.py
|
||||
+++ b/src/lxml/tests/test_etree.py
|
||||
@@ -1478,8 +1478,7 @@ class ETreeOnlyTestCase(HelperTestCase):
|
||||
# This would be the expected result, because there was no namespace
|
||||
pass
|
||||
else:
|
||||
- # This is a bug in libxml2
|
||||
- assert not ns, repr(ns)
|
||||
+ assert False, "Found unexpected namespace '%s'" % ns
|
||||
|
||||
def test_itertext_comment_pi(self):
|
||||
# https://bugs.launchpad.net/lxml/+bug/1844674
|
||||
--
|
||||
2.37.2
|
||||
|
||||
1
ci.fmf
Normal file
1
ci.fmf
Normal file
|
|
@ -0,0 +1 @@
|
|||
resultsdb-testcase: separate
|
||||
8
gating.yaml
Normal file
8
gating.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
--- !Policy
|
||||
product_versions:
|
||||
- fedora-*
|
||||
decision_contexts:
|
||||
- bodhi_update_push_testing
|
||||
- bodhi_update_push_stable
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build./plans/smoke.functional}
|
||||
28
get-lxml-source.sh
Executable file
28
get-lxml-source.sh
Executable file
|
|
@ -0,0 +1,28 @@
|
|||
#! /bin/bash -ex
|
||||
|
||||
# Download a release of lxml (if missing) and remove the isoschematron module from it
|
||||
|
||||
version=$1
|
||||
|
||||
if [ -z "${version}" ]; then
|
||||
echo "Usage: $0 VERSION" >& 2
|
||||
echo "" >& 2
|
||||
echo "example: $0 4.9.2" >& 2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
versionedname=lxml-${version}
|
||||
orig_archive=${versionedname}.tar.gz
|
||||
new_archive=${versionedname}-no-isoschematron-rng.tar.gz
|
||||
|
||||
if [ ! -e ${orig_archive} ]; then
|
||||
wget -N https://files.pythonhosted.org/packages/source/l/lxml/${orig_archive}
|
||||
fi
|
||||
|
||||
deleted_directory=lxml-${version}/src/lxml/isoschematron/resources/rng
|
||||
|
||||
# tar --delete does not operate on compressed archives, so do
|
||||
# gz decompression explicitly
|
||||
gzip --decompress ${orig_archive}
|
||||
tar -v --delete -f ${orig_archive//.gz} ${deleted_directory}
|
||||
gzip -cf ${orig_archive//.gz} > ${new_archive}
|
||||
7
plans/etree-fromstring.py
Normal file
7
plans/etree-fromstring.py
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
import lxml.etree as et
|
||||
s = '<foo><bar baz="xyzzy">a<![CDATA[b]]>c</bar></foo>'
|
||||
x = et.fromstring(s)
|
||||
t = x.find('bar').text
|
||||
print(t)
|
||||
if t != 'abc':
|
||||
raise Exception()
|
||||
12
plans/smoke.fmf
Normal file
12
plans/smoke.fmf
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
summary: Basic smoke test
|
||||
discover:
|
||||
how: shell
|
||||
tests:
|
||||
- name: /smoke/import-python-module
|
||||
test: |
|
||||
python3 -c 'import importlib as il; print(il.import_module("lxml"))'
|
||||
- name: /smoke/etree-fromstring
|
||||
test: |
|
||||
python3 plans/etree-fromstring.py
|
||||
execute:
|
||||
how: tmt
|
||||
1672
python-lxml.spec
1672
python-lxml.spec
File diff suppressed because it is too large
Load diff
2
sources
2
sources
|
|
@ -1 +1 @@
|
|||
SHA512 (lxml-4.7.1.tar.gz) = dd0d421e10db6c9084cf5b2c04a4fc54d74bd62b4dfa83efcf92dd46cd1c5f043c47613521b2de04c450b83eb1161d197b017c53e615e5785e97e7afe106b6cf
|
||||
SHA512 (lxml-6.0.2-no-isoschematron-rng.tar.gz) = dc89f75c3a3c828a46bcb2eefbebe8f98ce8072b9fb66f8ef81edbf2babed74e4c54e26392603319d60ab3bfab6a4795eedc85b28efba815797d43d53aae4060
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue