diff --git a/Changelog.md b/Changelog.md
index f2215bf5..d406911d 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -32,6 +32,7 @@
- fix: fix internal panic message when parse malformed XML
([#344](https://github.com/tafia/quick-xml/issues/344))
- test: add tests for trivial documents (empty / only comment / `...` -- one tag with content)
+- fix: CDATA was not handled in many cases where it should
## 0.23.0-alpha3
diff --git a/src/de/map.rs b/src/de/map.rs
index d6fca022..ab0b9943 100644
--- a/src/de/map.rs
+++ b/src/de/map.rs
@@ -109,7 +109,7 @@ where
} else {
// try getting from events (value)
match self.de.peek()? {
- DeEvent::Text(_) => {
+ DeEvent::Text(_) | DeEvent::CData(_) => {
self.state = State::InnerValue;
// Deserialize `key` from special attribute name which means
// that value should be taken from the text content of the
diff --git a/src/de/mod.rs b/src/de/mod.rs
index a4e86d88..8426dca7 100644
--- a/src/de/mod.rs
+++ b/src/de/mod.rs
@@ -597,7 +597,7 @@ where
V: Visitor<'de>,
{
match self.peek()? {
- DeEvent::Text(t) if t.is_empty() => visitor.visit_none(),
+ DeEvent::Text(t) | DeEvent::CData(t) if t.is_empty() => visitor.visit_none(),
DeEvent::Eof => visitor.visit_none(),
_ => visitor.visit_some(self),
}
diff --git a/src/de/var.rs b/src/de/var.rs
index 9125670f..2dbdd60c 100644
--- a/src/de/var.rs
+++ b/src/de/var.rs
@@ -36,6 +36,8 @@ where
let decoder = self.de.reader.decoder();
let de = match self.de.peek()? {
DeEvent::Text(t) => EscapedDeserializer::new(Cow::Borrowed(t), decoder, true),
+ // Escape sequences does not processed inside CDATA section
+ DeEvent::CData(t) => EscapedDeserializer::new(Cow::Borrowed(t), decoder, false),
DeEvent::Start(e) => EscapedDeserializer::new(Cow::Borrowed(e.name()), decoder, false),
_ => {
return Err(DeError::Unsupported(
@@ -64,7 +66,7 @@ where
fn unit_variant(self) -> Result<(), DeError> {
match self.de.next()? {
DeEvent::Start(e) => self.de.read_to_end(e.name()),
- DeEvent::Text(_) => Ok(()),
+ DeEvent::Text(_) | DeEvent::CData(_) => Ok(()),
_ => unreachable!(),
}
}