From 4f588f615d513f23bbb094dd89871f27275de2af Mon Sep 17 00:00:00 2001 From: lumi Date: Tue, 29 May 2018 15:59:36 +0200 Subject: [PATCH] Fix CDATA handling, add relevant test, update CHANGELOG, bump version to 0.9.1. --- CHANGELOG.md | 3 +++ Cargo.toml | 2 +- src/element.rs | 17 ++++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3fff023eabb6e81b577e0e92e1c9de4fcc5fe24..8e7062a562ddf99f024ea07dcae61980f45385b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/Cargo.toml b/Cargo.toml index de970054f5c74f05b6359d5a990e109ccbab9c79..3f49a66c3ea95c404741de098a78057f69b80e0d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "minidom" -version = "0.9.0" +version = "0.9.1" authors = [ "lumi ", "Emmanuel Gil Peyrot ", diff --git a/src/element.rs b/src/element.rs index d8a4a98a4762dbd52c8c7a60dd353fa777adb30e..485c97ff69a1674c3a95a821b0c6993ab8dc6711 100644 --- a/src/element.rs +++ b/src/element.rs @@ -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 = "]]>"; + let mut reader = EventReader::from_str(xml); + let elem = Element::from_reader(&mut reader).unwrap(); + assert_eq!(elem.text(), "'>blah"); +}