Skip to content

Conversation

Mingun
Copy link
Collaborator

@Mingun Mingun commented Oct 6, 2023

This PR restricts ability to deserialize primitive types (numbers, booleans, characters, strings) from XML documents that contains a trailing tag after a text. Previously the error emitted only when tag was before text.

Before that PR the XML

<struct>
  <field>42<something-wrong/></field>
</struct>

can be successfully deserialized into

struct Struct {
  field: u32,
}

which is not that you want generally. Now the DeError::UnexpectedStart error is returned. Also, probably we want that 42<something-wrong/> was passed to the u32::deserialize and deserialization fail because type decide that (for example, we might want to capture tag in String), but this would be possible only when #257 would be implemented.

Mingun added 4 commits October 6, 2023 22:13
New tests will be added in the following commit

(review with "ignore whitespace changes mode" on)
failures (72):
    trivial::cdata::char_::field
    trivial::cdata::char_::primitive
    trivial::cdata::f32_::field
    trivial::cdata::f32_::primitive
    trivial::cdata::f64_::field
    trivial::cdata::f64_::primitive
    trivial::cdata::false_::field
    trivial::cdata::false_::primitive
    trivial::cdata::i128_::field
    trivial::cdata::i128_::primitive
    trivial::cdata::i16_::field
    trivial::cdata::i16_::primitive
    trivial::cdata::i32_::field
    trivial::cdata::i32_::primitive
    trivial::cdata::i64_::field
    trivial::cdata::i64_::primitive
    trivial::cdata::i8_::field
    trivial::cdata::i8_::primitive
    trivial::cdata::isize_::field
    trivial::cdata::isize_::primitive
    trivial::cdata::string::field
    trivial::cdata::string::primitive
    trivial::cdata::true_::field
    trivial::cdata::true_::primitive
    trivial::cdata::u128_::field
    trivial::cdata::u128_::primitive
    trivial::cdata::u16_::field
    trivial::cdata::u16_::primitive
    trivial::cdata::u32_::field
    trivial::cdata::u32_::primitive
    trivial::cdata::u64_::field
    trivial::cdata::u64_::primitive
    trivial::cdata::u8_::field
    trivial::cdata::u8_::primitive
    trivial::cdata::usize_::field
    trivial::cdata::usize_::primitive
    trivial::text::char_::field
    trivial::text::char_::primitive
    trivial::text::f32_::field
    trivial::text::f32_::primitive
    trivial::text::f64_::field
    trivial::text::f64_::primitive
    trivial::text::false_::field
    trivial::text::false_::primitive
    trivial::text::i128_::field
    trivial::text::i128_::primitive
    trivial::text::i16_::field
    trivial::text::i16_::primitive
    trivial::text::i32_::field
    trivial::text::i32_::primitive
    trivial::text::i64_::field
    trivial::text::i64_::primitive
    trivial::text::i8_::field
    trivial::text::i8_::primitive
    trivial::text::isize_::field
    trivial::text::isize_::primitive
    trivial::text::string::field
    trivial::text::string::primitive
    trivial::text::true_::field
    trivial::text::true_::primitive
    trivial::text::u128_::field
    trivial::text::u128_::primitive
    trivial::text::u16_::field
    trivial::text::u16_::primitive
    trivial::text::u32_::field
    trivial::text::u32_::primitive
    trivial::text::u64_::field
    trivial::text::u64_::primitive
    trivial::text::u8_::field
    trivial::text::u8_::primitive
    trivial::text::usize_::field
    trivial::text::usize_::primitive
… return error instead of returning `text`

when deserialize into primitive types (ex. `u32`, but not struct S { #[serde(rename = "$text")] field: u32 })
@Mingun Mingun added bug serde Issues related to mapping from Rust types to XML labels Oct 6, 2023
@codecov-commenter
Copy link

Codecov Report

Merging #661 (9a354d7) into master (dd34cab) will increase coverage by 0.00%.
The diff coverage is 83.33%.

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

@@           Coverage Diff           @@
##           master     #661   +/-   ##
=======================================
  Coverage   64.60%   64.61%           
=======================================
  Files          36       36           
  Lines       17290    17294    +4     
=======================================
+ Hits        11170    11174    +4     
  Misses       6120     6120           
Flag Coverage Δ
unittests 64.61% <83.33%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files Coverage Δ
src/de/mod.rs 69.42% <83.33%> (+0.05%) ⬆️

@Mingun Mingun merged commit c79ad58 into tafia:master Oct 7, 2023
@Mingun Mingun deleted the strict-de-of-primitives branch October 7, 2023 17:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug serde Issues related to mapping from Rust types to XML
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants