Merge pull request #102 from ephraimkunz/master

Prevent Yaserde from reading non #[yaserde(...)] attributes
This commit is contained in:
Marc-Antoine ARNAUD 2021-02-08 11:36:29 +01:00 committed by GitHub
commit 31093262b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -42,7 +42,7 @@ impl YaSerdeAttribute {
let mut skip_serializing_if = None;
let mut text = false;
for attr in attrs.iter() {
for attr in attrs.iter().filter(|a| a.path.is_ident("yaserde")) {
let mut attr_iter = attr.clone().tokens.into_iter();
if let Some(token) = attr_iter.next() {
if let TokenTree::Group(group) = token {
@ -235,6 +235,55 @@ fn parse_attributes() {
);
}
#[test]
fn only_parse_yaserde_attributes() {
use proc_macro2::{Span, TokenStream};
use std::str::FromStr;
use syn::punctuated::Punctuated;
use syn::token::Bracket;
use syn::token::Pound;
use syn::AttrStyle::Outer;
use syn::{Ident, Path, PathArguments, PathSegment};
let mut punctuated = Punctuated::new();
punctuated.push(PathSegment {
ident: Ident::new("serde", Span::call_site()),
arguments: PathArguments::None,
});
let attributes = vec![Attribute {
pound_token: Pound {
spans: [Span::call_site()],
},
style: Outer,
bracket_token: Bracket {
span: Span::call_site(),
},
path: Path {
leading_colon: None,
segments: punctuated,
},
tokens: TokenStream::from_str("(flatten)").unwrap(),
}];
let attrs = YaSerdeAttribute::parse(&attributes);
assert_eq!(
YaSerdeAttribute {
attribute: false,
default: None,
default_namespace: None,
flatten: false,
namespaces: BTreeMap::new(),
prefix: None,
rename: None,
skip_serializing_if: None,
text: false,
},
attrs
);
}
#[test]
fn parse_attributes_with_values() {
use proc_macro2::{Span, TokenStream};