wip: Strict deserialization returns error on any unknown xml field or attribute

This commit is contained in:
Jean-Gabriel Gill-Couture 2024-10-14 15:03:34 -04:00
parent 5cd09186fa
commit 353558737f
2 changed files with 20 additions and 0 deletions

View File

@ -1117,3 +1117,20 @@ fn de_nested_macro_rules() {
float_attrs!(f32); float_attrs!(f32);
} }
#[test]
fn de_strict() {
init();
#[derive(PartialEq, Debug, YaDeserialize)]
pub struct Struct {
id: i32,
}
let xml_content = r#"<?xml version="1.0" encoding="utf-8"?>
<Struct>
<id>123</id>
<NonExistentAttrShouldCrash></NonExistentAttrShouldCrash>
</Struct>"#;
let load: Result<Struct, String> = from_str(xml_content);
assert!(load.is_err());
}

View File

@ -431,6 +431,9 @@ pub fn parse(
match (namespace.as_str(), name.local_name.as_str()) { match (namespace.as_str(), name.local_name.as_str()) {
#call_visitors #call_visitors
_ => { _ => {
::yaserde::__derive_trace!("SKIPPINGSKIPPING Skipping element {:?}", name.local_name);
return Err(format!("Found unauthorized element {}", name.local_name));
let event = reader.next_event()?; let event = reader.next_event()?;
#write_unused #write_unused