Releases: tafia/quick-xml
v0.40.1 - Fix rarely possible serde deserialization panic
What's Changed
- #964: Fix
unreachable!()panic in the serde deserializer when a DOCTYPE declaration appears between two text runs inside an element (e.g.<a>x<!DOCTYPE y>z</a>). The DOCTYPE used to breakdrain_text's consecutive-text merge, so twoDeEvent::Textevents reachedread_textand tripped its "Cannot be two consequent Text events" invariant. DOCTYPE is now treated as transparent during text drain — it still goes through the entity resolver, but the surrounding text is merged into one run. Discovered via libFuzzer on a real-world SAML deserializer harness.
New Contributors
- @williamareynolds made their first contribution in #964
Full Changelog: v0.40.0...v0.40.1
v0.40.0 - UTF-16 and ISO-2022-JP encodings supported
What's Changed
MSRV bumped to 1.79.
Now quick-xml supports the UTF-16 and ISO-2022-JP encoded documents. See the new DecodingReader type.
New Features
-
#956: Add
DecodingReader, aBufReadadapter that auto-detects encoding from BOM or XML declaration and transcodes to UTF-8. Enabled by theencodingfeature. -
#938: Add new enumeration
XmlVersionand typified getterBytesDecl::xml_version(). -
#938: Add new error variant
IllFormedError::UnknownVersion. -
#371: Add new error variant
EscapeError::TooManyNestedEntities. -
#371: Improved compliance with the XML attribute value normalization process by adding
Attribute::normalized_value()Attribute::normalized_value_with()Attribute::decoded_and_normalized_value()Attribute::decoded_and_normalized_value_with()
which ought to be used in place of deprecated
Attribute::unescape_value()Attribute::unescape_value_with()Attribute::decode_and_unescape_value()Attribute::decode_and_unescape_value_with()
Deprecated functions now behaves the same as newly added.
Bug Fixes
- #938: Use correct rules for EOL normalization in
Deserializerwhen parse XML 1.0 documents. Previously XML 1.1. rules was applied.
Misc Changes
- #914: Remove deprecated
.prefixes(),.resolve(),.resolve_attribute(), and.resolve_element()ofNsReader. Use.resolver().<...>methods instead. - #938: Now
BytesText::xml_content,BytesCData::xml_contentandBytesRef::xml_contentacceptsXmlVersionparameter to apply correct EOL normalization rules. - #944:
read_text()now returnsBytesTextwhich allows you to get the content with properly normalized EOLs. To get the previous behavior use.read_text().decode()?. - #956: Bumped MSRV from 1.59 (Feb 2022) to 1.79 (June 2024)
New Contributors
Full Changelog: v0.39.4...v0.40.0
v0.39.4 - Fix another panics when parse malformed DTD
Bug Fixes
- #957: Fix slice-index panic when reading malformed DTD whose unknown markup is split across
BufReaderchunks. As with #950, the returnedEvent::DocTypemay contain the malformed DTD; this fix only ensures that the parser does not panic. - #960: Fix sibling slice-index panic when a single chunk delivers
<followed by 9+ bytes of unknown markup inside a DTD internal subset. Same disposition as #957 / #950: parser must not panic; DTD validity reporting is a future improvement.
Full Changelog: v0.39.3...v0.39.4
v0.39.3 - Fix panic when parse malformed DTD
Bug Fixes
- #950: Fix subtraction with overflow when parse malformed DTD in some cases. Note, that currently we do not check the validity of DTD, so the returned
Event::DocTypemay contain the malformed DTD.
Full Changelog: v0.39.2...v0.39.3
v0.39.2 - Fix regression and read_text_into
What's Changed
New Features
- #483: Implement
read_text_into()andread_text_into_async().
Bug Fixes
- #939: Fix parsing error of the tag from buffered reader, when the first byte
<is the last in theBufReadinternal buffer. This is the regression from #936.
Full Changelog: v0.39.1...v0.39.2
v0.39.1 - Fixes in read_to_end / read_text
What's Changed
New Features
- #598: Add method
NamespaceResolver::set_levelwhich may be helpful in some circumstances.
Bug Fixes
- #597: Fix incorrect processing of namespace scopes in
NsReader::read_to_end,NsReader::read_to_end_into,NsReader::read_to_end_into_asyncandNsReader::read_text. The scope started by a start element was not ended after that call. - #936: Fix incorrect result of
.read_text()when it is called after readingTextorGeneralRefevent.
v0.39.0 - Config for Writer
What's Changed
Added a way to configure Writer. Now all configuration is contained in the writer::Config
struct and can be applied at once. When serde-types feature is enabled, configuration is serializable.
New Features
- #846: Add methods
config()andconfig_mut()to inspect and change the writer configuration. - #846: Add ability to write space before
/>in self-closed tags for maximum compatibility with XHTML. - #846: Add method
empty_element_handling()as a more powerful alternative toexpand_empty_elements()inSerializer. - #929: Allow to pass list of field names to
impl_deserialize_for_internally_tagged_enum!macro which is required if you enum variants contains$valuefields.
Bug Fixes
- #923: Implement correct skipping of well-formed DTD.
Misc Changes
- #908: Increase minimal supported
serdeversion from 1.0.139 to 1.0.180. - #913: Deprecate
.prefixes(),.resolve(),.resolve_attribute(), and.resolve_element()ofNsReader. Use.resolver().bindings()and.resolver().resolve()methods instead. - #913:
Attributes::has_nilnow acceptsNamespaceResolverinstead ofReader<R>. - #924: (breaking change) Split
SyntaxError::UnclosedPIOrXmlDeclintoUnclosedPIandUnclosedXmlDeclfor more precise error reporting. - #924: (breaking change)
Parser::eof_errornow takes&selfand content&[u8]parameters. - #926: (breaking change) Split
SyntaxError::UnclosedTagintoUnclosedTag,UnclosedSingleQuotedAttributeValueandUnclosedDoubleQuotedAttributeValuefor more precise error reporting.
New Contributors
- @rzmk made their first contribution in #920
- @zrneely made their first contribution in #922
- @SuchAFuriousDeath made their first contribution in #924
- @tayu0110 made their first contribution in #925
Full Changelog: v0.38.4...v0.39.0
v0.38.4 - CDATA serialization in serde
What's Changed
New Features
- #353: Add ability to serialize textual content as CDATA sections in
Serializer. Everywhere where the text node may be created, a CDATA section(s) could be produced instead. See the newSerializer::text_format()method.
Bug Fixes
- #912: Fix deserialization of numbers, booleans and characters that is space-wrapped, for example
<int> 42 </int>. That space characters are usually indent added during serialization and other XML serialization libraries trims them
Misc Changes
New Contributors
- @Ninja3047 made their first contribution in #904
- @alexanderkjall made their first contribution in #901
Full Changelog: v0.38.3...v0.38.4
v0.38.3 - Fix EOL normalization in some cases
What's Changed
Bug Fixes
- #895: Fix incorrect normalization of
\rXEOL sequences whereXis a char which is UTF-8 encoded as [c2 xx], except [c2 85].
Misc Changes
- #895: Add new
xml10_content()andxml11_content()methods which behaves the same ashtml_content()andxml_content()methods, but express intention more clearly.
Full Changelog: v0.38.2...v0.38.3
v0.38.2 - Make NamespaceResolver public
What's Changed
New Features
- #893: Implement
FusedIteratorforNamespaceBindingsIter. - #893: Make
NamespaceResolverpublic. - #893: Add
NsReader::resolver()for access to namespace resolver.
Misc Changes
- #893: Rename
PrefixItertoNamespaceBindingsIter.
New Contributors
- @decathorpe made their first contribution in #891
Full Changelog: v0.38.1...v0.38.2