From 56b2e39dda146c7b1bac2996900fe0fea5a4a98e Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Tue, 13 Mar 2018 09:55:29 -0700 Subject: [PATCH] Fix panic when a reference has unspecified lifetime This will fail later in compilation anyway, but serde_derive needs to not crash before then. #[derive(Deserialize)] struct A { field: &str, } error[E0106]: missing lifetime specifier --> src/main.rs | | field: &str, | ^ expected lifetime parameter --- serde_derive_internals/src/attr.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serde_derive_internals/src/attr.rs b/serde_derive_internals/src/attr.rs index 7081907e..868a8932 100644 --- a/serde_derive_internals/src/attr.rs +++ b/serde_derive_internals/src/attr.rs @@ -936,7 +936,7 @@ impl Field { } else if is_rptr(&field.ty, is_str) || is_rptr(&field.ty, is_slice_u8) { // Types &str and &[u8] are always implicitly borrowed. No need for // a #[serde(borrow)]. - borrowed_lifetimes = borrowable_lifetimes(cx, &ident, &field.ty).unwrap(); + collect_lifetimes(&field.ty, &mut borrowed_lifetimes); } let ser_name = ser_name.get();