Fix CDATA handling, add relevant test, update CHANGELOG, bump version to 0.9.1.
lumi
created
Change summary
CHANGELOG.md | 3 +++
Cargo.toml | 2 +-
src/element.rs | 17 ++++++++++++++++-
3 files changed, 20 insertions(+), 2 deletions(-)
Detailed changes
@@ -1,3 +1,6 @@
+Version 0.9.1, released 2018-05-29:
+ * Fixes
+ * Lumi fixed CDATA handling, minidom will not unescape CDATA bodies anymore.
Version 0.9.0, released 2018-04-10:
* Small changes
- Upgrade quick_xml to 0.12.1
@@ -1,6 +1,6 @@
[package]
name = "minidom"
-version = "0.9.0"
+version = "0.9.1"
authors = [
"lumi <lumi@pew.im>",
"Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>",
@@ -414,13 +414,20 @@ impl Element {
to.append_child(elem);
}
},
- Event::Text(s) | Event::CData(s) => {
+ Event::Text(s) => {
let text = s.unescape_and_decode(reader)?;
if text != "" {
let mut current_elem = stack.last_mut().unwrap();
current_elem.append_text_node(text);
}
},
+ Event::CData(s) => {
+ let text = reader.decode(&s).into_owned();
+ if text != "" {
+ let mut current_elem = stack.last_mut().unwrap();
+ current_elem.append_text_node(text);
+ }
+ },
Event::Eof => {
break;
},
@@ -988,3 +995,11 @@ fn parses_spectest_xml() { // From: https://gitlab.com/lumi/minidom-rs/issues/8
let mut reader = EventReader::from_str(xml);
let _ = Element::from_reader(&mut reader).unwrap();
}
+
+#[test]
+fn does_not_unescape_cdata() {
+ let xml = "<test><![CDATA['>blah<blah>]]></test>";
+ let mut reader = EventReader::from_str(xml);
+ let elem = Element::from_reader(&mut reader).unwrap();
+ assert_eq!(elem.text(), "'>blah<blah>");
+}