mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-22 11:28:02 +00:00
Prevent various panics when deserializing malformed SystemTime
This commit is contained in:
@@ -15,7 +15,7 @@ use std::sync::atomic::{
|
||||
AtomicUsize, Ordering,
|
||||
};
|
||||
use std::sync::{Arc, Weak as ArcWeak};
|
||||
use std::time::{Duration, UNIX_EPOCH};
|
||||
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
use std::sync::atomic::{AtomicI64, AtomicU64};
|
||||
@@ -199,6 +199,19 @@ macro_rules! declare_error_tests {
|
||||
assert_de_tokens_error::<$target>($tokens, $expected);
|
||||
}
|
||||
)+
|
||||
};
|
||||
|
||||
($(
|
||||
$(#[$cfg:meta])*
|
||||
$name:ident<$target:ty> { $tokens:expr, $expected:expr, }
|
||||
)+) => {
|
||||
$(
|
||||
$(#[$cfg])*
|
||||
#[test]
|
||||
fn $name() {
|
||||
assert_de_tokens_error::<$target>($tokens, $expected);
|
||||
}
|
||||
)+
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1614,4 +1627,35 @@ declare_error_tests! {
|
||||
],
|
||||
"overflow deserializing Duration",
|
||||
}
|
||||
test_systemtime_overflow_seq<SystemTime> {
|
||||
&[
|
||||
Token::Seq { len: Some(2) },
|
||||
Token::U64(u64::max_value()),
|
||||
Token::U32(1_000_000_000),
|
||||
Token::SeqEnd,
|
||||
],
|
||||
"overflow deserializing SystemTime epoch offset",
|
||||
}
|
||||
test_systemtime_overflow_struct<SystemTime> {
|
||||
&[
|
||||
Token::Struct { name: "SystemTime", len: 2 },
|
||||
Token::Str("secs_since_epoch"),
|
||||
Token::U64(u64::max_value()),
|
||||
|
||||
Token::Str("nanos_since_epoch"),
|
||||
Token::U32(1_000_000_000),
|
||||
Token::StructEnd,
|
||||
],
|
||||
"overflow deserializing SystemTime epoch offset",
|
||||
}
|
||||
#[cfg(systemtime_checked_add)]
|
||||
test_systemtime_overflow<SystemTime> {
|
||||
&[
|
||||
Token::Seq { len: Some(2) },
|
||||
Token::U64(u64::max_value()),
|
||||
Token::U32(0),
|
||||
Token::SeqEnd,
|
||||
],
|
||||
"overflow deserializing SystemTime",
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user