Skip to content

Conversation

@pyup-bot
Copy link
Collaborator

This PR updates lxml from 4.6.3 to 6.0.2.

Changelog

6.0.2

==================

Bugs fixed
----------

* LP2125278: Compilation with libxml2 2.15.0 failed.
Original patch by Xi Ruoyao.

* Setting ``decompress=True`` in the parser had no effect in libxml2 2.15.

* Binary wheels on Linux and macOS use the library version libxml2 2.14.6.
See https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.14.6

* Test failures in libxml2 2.15.0 were fixed.

Other changes
-------------

* Binary wheels for Py3.9-3.11 on the ``riscv64`` architecture were added.

* Error constants were updated to match libxml2 2.15.0.

* Built using Cython 3.1.4.

6.0.1

==================

Bugs fixed
----------

* LP2116333: ``lxml.sax._getNsTag()`` could fail with an exception on malformed input.

* GH467: Some test adaptations were made for libxml2 2.15.
Patch by Nick Wellnhofer.

* LP2119510, GH473: A Python compatibility test was fixed for Python 3.14+.
Patch by Lumír Balhar.

* GH471: Wheels for "riscv64" on recent Python versions were added.
Patch by ffgan.

* GH469: The wheel build no longer requires the ``wheel`` package unconditionally.
Patch by Miro Hrončok.

* Binary wheels use the library version libxml2 2.14.5.
See https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.14.5

* Windows binary wheels continue to use a security patched library version libxml2 2.11.9.

6.0.0

==================

Features added
--------------

* GH463: ``lxml.html.diff`` is faster and provides structurally better diffs.
Original patch by Steven Fernandez.

* GH405: The factories ``Element`` and ``ElementTree`` can now be used in type hints.

* GH448: Parsing from ``memoryview`` and other buffers is supported to allow zero-copy parsing.

* GH437: ``lxml.html.builder`` was missing several HTML5 tag names.
Patch by Nick Tarleton.

* GH458: ``CDATA`` can now be written into the incremental ``xmlfile()`` writer.
Original patch by Lane Shaw.

* A new parser option ``decompress=False`` was added that controls the automatic
input decompression when using libxml2 2.15.0 or later.  Disabling this option
by default will effectively prevent decompression bombs when handling untrusted
input.  Code that depends on automatic decompression must enable this option.
Note that libxml2 2.15.0 was not released yet, so this option currently has no
effect but can already be used.

* The set of compile time / runtime supported libxml2 feature names is available as
``etree.LIBXML_COMPILED_FEATURES`` and ``etree.LIBXML_FEATURES``.
This currently includes
``catalog``, ``ftp``, ``html``, ``http``, ``iconv``, ``icu``,
``lzma``, ``regexp``, ``schematron``, ``xmlschema``, ``xpath``, ``zlib``.

Bugs fixed
----------

* GH353: Predicates in ``.find*()`` could mishandle tag indices if a default namespace is provided.
Original patch by Luise K.

* GH272: The ``head`` and ``body`` properties of ``lxml.html`` elements failed if no such element
was found.  They now return ``None`` instead.
Original patch by FVolral.

* Tag names provided by code (API, not data) that are longer than ``INT_MAX``
could be truncated or mishandled in other ways.

* ``.text_content()`` on ``lxml.html`` elements accidentally returned a "smart string"
without additional information.  It now returns a plain string.

* LP2109931: When building lxml with coverage reporting, it now disables the ``sys.monitoring``
support due to the lack of support in https://github.com/nedbat/coveragepy/issues/1790

Other changes
-------------

* Support for Python < 3.8 was removed.

* Parsing directly from zlib (or lzma) compressed data is now considered an optional
feature in lxml.  It may get removed from libxml2 at some point for security reasons
(compression bombs) and is therefore no longer guaranteed to be available in lxml.

As of this release, zlib support is still normally available in the binary wheels
but may get disabled or removed in later (x.y.0) releases.  To test the availability,
use ``"zlib" in etree.LIBXML_FEATURES``.

* The ``Schematron`` class is deprecated and will become non-functional in a future lxml version.
The feature will soon be removed from libxml2 and stop being available.

* GH438: Wheels include the ``arm7l`` target.

* GH465: Windows wheels include the ``arm64`` target.
Patch by Finn Womack.

* Binary wheels use the library versions libxml2 2.14.4 and libxslt 1.1.43.
Note that this disables direct HTTP and FTP support for parsing from URLs.
Use Python URL request tools instead (which usually also support HTTPS).
To test the availability, use ``"http" in etree.LIBXML_FEATURES``.

* Windows binary wheels use the library versions libxml2 2.11.9, libxslt 1.1.39 and libiconv 1.17.
They are now based on VS-2022.

* Built using Cython 3.1.2.

* The debug methods ``MemDebug.dump()`` and ``MemDebug.show()`` were removed completely.
libxml2 2.13.0 discarded this feature.

5.4.0

==================

Bugs fixed
----------

* LP2107279: Binary wheels use libxml2 2.13.8 and libxslt 1.1.43 to resolve several CVEs.
(Binary wheels for Windows continue to use a patched libxml2 2.11.9 and libxslt 1.1.39.)
Issue found by Anatoly Katyushin.

5.3.2

==================

This release resolves CVE-2025-24928 as described in
https://gitlab.gnome.org/GNOME/libxml2/-/issues/847

Bugs fixed
----------

* Binary wheels use libxml2 2.12.10 and libxslt 1.1.42.

* Binary wheels for Windows use a patched libxml2 2.11.9 and libxslt 1.1.39.

5.3.1

==================

Bugs fixed
----------

* GH440: Some tests were adapted for libxml2 2.14.0.
Patch by Nick Wellnhofer.

* LP2097175: ``DTD(external_id="…")`` erroneously required a byte string as ID value.

* GH450: ``iterparse()`` internally triggered the `DeprecationWarning`` added in lxml 5.3.0 when parsing HTML.

Other changes
-------------

* GH442: Binary wheels for macOS no longer use the linker flag ``-flat_namespace``.

5.3.0

==================

Features added
--------------

* GH421: Nested ``CDATA`` sections are no longer rejected but split on output
to represent ``]]>`` correctly.
Patch by Gertjan Klein.

Bugs fixed
----------

* LP2060160: Attribute values serialised differently in ``xmlfile.element()`` and ``xmlfile.write()``.

* LP2058177: The ISO-Schematron implementation could fail on unknown prefixes.
Patch by David Lakin.

Other changes
-------------

* LP2067707: The ``strip_cdata`` option in ``HTMLParser()`` turned out to be useless and is now deprecated.

* Binary wheels use the library versions libxml2 2.12.9 and libxslt 1.1.42.

* Windows binary wheels use the library versions libxml2 2.11.8 and libxslt 1.1.39.

* Built with Cython 3.0.11.

5.2.2

==================

Bugs fixed
----------

* GH417: The ``test_feed_parser`` test could fail if ``lxml_html_clean`` was not installed.
It is now skipped in that case.

* LP2059910: The minimum CPU architecture for the Linux x86 binary wheels was set back to
"core2", without SSE 4.2.

* If libxml2 uses iconv, the compile time version is available as `etree.ICONV_COMPILED_VERSION`.

5.2.1

==================

Bugs fixed
----------

* LP2059910: The minimum CPU architecture for the Linux x86 binary wheels was set back to
"core2", but with SSE 4.2 enabled.

* LP2059977: ``Element.iterfind("//absolute_path")`` failed with a ``SyntaxError``
where it should have issued a warning.

* GH416: The documentation build was using the non-standard ``which`` command.
Patch by Michał Górny.

5.2.0

==================

Other changes
-------------

* LP1958539: The ``lxml.html.clean`` implementation suffered from several (only if used)
security issues in the past and was now extracted into a separate library:

https://github.com/fedora-python/lxml_html_clean

Projects that use lxml without "lxml.html.clean" will not notice any difference,
except that they won't have potentially vulnerable code installed.
The module is available as an "extra" setuptools dependency "lxml[html_clean]",
so that Projects that need "lxml.html.clean" will need to switch their requirements
from "lxml" to "lxml[html_clean]", or install the new library themselves.

* The minimum CPU architecture for the Linux x86 binary wheels was upgraded to
"sandybridge" (launched 2011), and glibc 2.28 / gcc 12 (manylinux_2_28) wheels were added.

* Built with Cython 3.0.10.

5.1.1

==================

Bugs fixed
----------

* LP2048920: ``iterlinks()`` in ``lxml.html`` rejected ``bytes`` input in 5.1.0.

* High source line numbers from the parser are no longer truncated
(up to a C ``long``) when using libxml2 2.11 or later.

Other changes
-------------

* GH407: A compatibility test was adapted to recent expat versions.
Patch by Miro Hrončok.

* Binary wheels use the library versions libxml2 2.12.6 and libxslt 1.1.39.

* Windows binary wheels use the library versions libxml2 2.11.7 and libxslt 1.1.39.

* Built with Cython 3.0.9.

5.1.0

==================

Features added
--------------

* Parsing ASCII strings is slightly faster.

Bugs fixed
----------

* GH349: The HTML ``Cleaner()`` interpreted an accidentally provided string parameter
for the ``host_whitelist`` as list of characters and silently failed to reject any hosts.
Passing a non-collection is now rejected.

Other changes
-------------

* Support for Python 2.7 and Python versions < 3.6 was removed.

* The wheel build was migrated to use ``cibuildwheel``.
Patch by Primož Godec.

5.0.2

==================

Other changes
-------------

* GH407: A compatibility test was adapted to recent expat versions.
Patch by Miro Hrončok.

* Binary wheels use the library versions libxml2 2.12.6 and libxslt 1.1.39.

* Built with Cython 3.0.9.

5.0.1

==================

Bugs fixed
----------

* LP2046208: Parsing non-BMP Python Unicode strings could fail on macOS.

* LP2044225: When incrementally parsing broken HTML, reporting start events on
missing structural tags failed and could lead to subsequent exceptions.

* LP2045435: Some (not all) issues with stricter C compilers were resolved.

* The binary wheels in the 5.0.0 release did not validate cleanly (but installed ok).


.. _latest_release:

5.0.0

==================

Features added
--------------

* Character escaping in ``C14N2`` serialisation now uses a single pass over the text
instead of searching for each unescaped character separately.

* Early support for Python 3.13a2 was added.

Bugs fixed
----------

* LP1976304: The ``Element.addnext()`` method previously inserted the new element
before existing tail text.  The tail text of both sibling elements now stays on
the respective elements.

* LP1980767, GH379: ``TreeBuilder.close()`` could fail with a ``TypeError`` after
parsing incorrect input.  Original patch by Enrico Minack.

* ``Element.itertext(with_tail=False)`` returned the tail text of comments and
processing instructions, despite the explicit option.

* GH370: A crash with recent libxml2 2.11.x versions was resolved.
Patch by Michael Schlenker.

* A compile problem with recent libxml2 2.12.x versions was resolved.

* The internal exception handling in C callbacks was improved for Cython 3.0.

* The exception declarations of ``xmlInputReadCallback``, ``xmlInputCloseCallback``,
``xmlOutputWriteCallback`` and ``xmlOutputCloseCallback`` in ``tree.pxd`` were
corrected to prevent running Python code or calling into the C-API with a live
exception set.

* GH385: The long deprecated ``unittest.m̀akeSuite()`` function is no longer used.
Patch by Miro Hrončok.

* LP1522052: A file-system specific test is now optional and should no longer fail
on systems that don't support it.

* GH392: Some tests were adapted for libxml2 2.13.
Patch by Nick Wellnhofer.

* Contains all fixes from lxml 4.9.4.

Other changes
-------------

* LP1742885: lxml no longer expands external entities (XXE) by default to prevent
the security risk of loading arbitrary files and URLs.  If this feature is needed,
it can be enabled in a backwards compatible way by using a parser with the option
``resolve_entities=True``.  The new default is ``resolve_entities='internal'``.

* With libxml2 2.10.4 and later (as provided by the lxml 5.0 binary wheels),
parsing HTML tags with "prefixes" no longer builds a namespace dictionary
in ``nsmap`` but considers the ``prefix:name`` string the actual tag name.
With older libxml2 versions, since 2.9.11, the prefix was removed.  Before
that, the prefix was parsed as XML prefix.

lxml 5.0 does not try to hide this difference but now changes the ElementPath
implementation to let ``element.find("part1:part2")`` search for the tag
``part1:part2`` in documents parsed as HTML, instead of looking only for ``part2``.

* LP2024343: The validation of the schema file itself is now optional in the
ISO-Schematron implementation.  This was done because some lxml distributions
discard the RNG validation schema file due to licensing issues.  The validation
can now always be disabled with ``Schematron(..., validate_schema=False)``.
It is enabled by default if available and disabled otherwise.  The module
constant ``lxml.isoschematron.schematron_schema_valid_supported`` can be used
to detect whether schema file validation is available.

* Some redundant and long deprecated methods were removed:
``parser.setElementClassLookup()``,
``xslt_transform.apply()``,
``xpath.evaluate()``.

* Some incorrect declarations were removed from ``python.pxd``. In general, this file
should not be used by external Cython code. Use the C-API declarations provided by
Cython itself instead.

* Binary wheels use the library versions libxml2 2.12.3 and libxslt 1.1.39.

* Built with Cython 3.0.7, updated to follow recent changes in Cython 3.1-dev.

4.9.4

==================

Bugs fixed
----------

* LP2046398: Inserting/replacing an ancestor into a node's children could loop indefinitely.

* LP1980767, GH379: ``TreeBuilder.close()`` could fail with a ``TypeError`` after
parsing incorrect input.  Original patch by Enrico Minack.

* LP1522052: A file-system specific test is now optional and should no longer fail
on systems that don't support it.

Other changes
-------------

* Wheels include zlib 1.3, libxml2 2.10.3 and libxslt 1.1.39
(zlib 1.2.12, libxml2 2.10.3 and libxslt 1.1.37 on Windows).

* Built with Cython 0.29.37.

4.9.3

==================

Bugs fixed
----------

* LP2008911: ``lxml.objectify`` accepted non-decimal numbers like ``²²²`` as integers.

* A memory leak in ``lxml.html.clean`` was resolved by switching to Cython 0.29.34+.

* GH348: URL checking in the HTML cleaner was improved.
Patch by Tim McCormack.

* GH371, GH373: Some regex strings were changed to raw strings to fix Python warnings.
Patches by Jakub Wilk and Anthony Sottile.

Other changes
-------------

* Wheels include zlib 1.2.13, libxml2 2.10.3 and libxslt 1.1.38
(zlib 1.2.12, libxml2 2.10.3 and libxslt 1.1.37 on Windows).

* Built with Cython 0.29.36 to adapt to changes in Python 3.12.

4.9.2

==================

Bugs fixed
----------

* CVE-2022-2309: A Bug in libxml2 2.9.1[0-4] could let namespace declarations
from a failed parser run leak into later parser runs.  This bug was worked around
in lxml and resolved in libxml2 2.10.0.
https://gitlab.gnome.org/GNOME/libxml2/-/issues/378

Other changes
-------------

* LP1981760: ``Element.attrib`` now registers as ``collections.abc.MutableMapping``.

* lxml now has a static build setup for macOS on ARM64 machines (not used for building wheels).
Patch by Quentin Leffray.

4.9.1

==================

Bugs fixed
----------

* A crash was resolved when using ``iterwalk()`` (or ``canonicalize()``)
after parsing certain incorrect input.  Note that ``iterwalk()`` can crash
on *valid* input parsed with the same parser *after* failing to parse the
incorrect input.

4.9.0

==================

Bugs fixed
----------

* GH341: The mixin inheritance order in ``lxml.html`` was corrected.
Patch by xmo-odoo.

Other changes
-------------

* Built with Cython 0.29.30 to adapt to changes in Python 3.11 and 3.12.

* Wheels include zlib 1.2.12, libxml2 2.9.14 and libxslt 1.1.35
(libxml2 2.9.12+ and libxslt 1.1.34 on Windows).

* GH343: Windows-AArch64 build support in Visual Studio.
Patch by Steve Dower.

4.8.0

==================

Features added
--------------

* GH337: Path-like objects are now supported throughout the API instead of just strings.
Patch by Henning Janssen.

* The ``ElementMaker`` now supports ``QName`` values as tags, which always override
the default namespace of the factory.

Bugs fixed
----------

* GH338: In lxml.objectify, the XSI float annotation "nan" and "inf" were spelled in
lower case, whereas XML Schema datatypes define them as "NaN" and "INF" respectively.
Patch by Tobias Deiminger.

Other changes
-------------

* Built with Cython 0.29.28.

4.7.1

==================

Features added
--------------

* Chunked Unicode string parsing via ``parser.feed()`` now encodes the input data
to the native UTF-8 encoding directly, instead of going through ``Py_UNICODE`` /
``wchar_t`` encoding first, which previously required duplicate recoding in most cases.

Bugs fixed
----------

* The standard namespace prefixes were mishandled during "C14N2" serialisation on Python 3.
See https://mail.python.org/archives/list/lxmlpython.org/thread/6ZFBHFOVHOS5GFDOAMPCT6HM5HZPWQ4Q/

* ``lxml.objectify`` previously accepted non-XML numbers with underscores (like "1_000")
as integers or float values in Python 3.6 and later. It now adheres to the number
format of the XML spec again.

* LP1939031: Static wheels of lxml now contain the header files of zlib and libiconv
(in addition to the already provided headers of libxml2/libxslt/libexslt).

Other changes
-------------

* Wheels include libxml2 2.9.12+ and libxslt 1.1.34 (also on Windows).

4.7.0

==================

* Release retracted due to missing files in lxml/includes/.

4.6.5

==================

Bugs fixed
----------

* A vulnerability (GHSL-2021-1038) in the HTML cleaner allowed sneaking script
content through SVG images (CVE-2021-43818).

* A vulnerability (GHSL-2021-1037) in the HTML cleaner allowed sneaking script
content through CSS imports and other crafted constructs (CVE-2021-43818).

4.6.4

==================

Features added
--------------

* GH317: A new property ``system_url`` was added to DTD entities.
Patch by Thirdegree.

* GH314: The ``STATIC_*`` variables in ``setup.py`` can now be passed via env vars.
Patch by Isaac Jurado.
Links

@pyup-bot pyup-bot mentioned this pull request Sep 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants