Validate string max length

This commit is contained in:
vagola
2020-01-04 12:39:31 +03:00
parent 0287fadb1e
commit d7c35639c9
3 changed files with 71 additions and 13 deletions

View File

@@ -37,6 +37,13 @@ fn impl_encoder_trait(name: &Ident, fields: &Fields) -> TokenStream2 {
let unparsed_meta = get_packet_field_meta(field);
let parsed_meta = parse_packet_field_meta(&unparsed_meta);
// This is special case because max length are used only for strings.
if let Some(max_length) = parsed_meta.max_length {
return quote! {
crate::EncoderWriteExt::write_string(writer, &self.#name, #max_length)?;
};
}
let module = parsed_meta.module.as_deref().unwrap_or("Encoder");
let module_ident = Ident::new(&module, Span::call_site());
@@ -65,6 +72,13 @@ fn impl_decoder_trait(name: &Ident, fields: &Fields) -> TokenStream2 {
let unparsed_meta = get_packet_field_meta(field);
let parsed_meta = parse_packet_field_meta(&unparsed_meta);
// This is special case because max length are used only for strings.
if let Some(max_length) = parsed_meta.max_length {
return quote! {
let #name = crate::DecoderReadExt::read_string(reader, #max_length)?;
};
}
match parsed_meta.module {
Some(module) => {
let module_ident = Ident::new(&module, Span::call_site());