@@ -63,11 +63,15 @@ pub(crate) fn get_utc_date_time_from_asn1_milli<T: AsRef<[u8]>>(data: T) -> Resu
6363 } ;
6464
6565 if let Ok ( decoded) = decoded {
66- Ok ( DateTime :: < FixedOffset > :: from_utc (
67- NaiveDateTime :: parse_from_str ( & decoded, format) ?,
68- FixedOffset :: east ( 0 ) ,
69- )
70- . with_timezone ( & Utc ) )
66+ if let Some ( offset) = FixedOffset :: east_opt ( 0 ) {
67+ Ok ( DateTime :: < FixedOffset > :: from_utc (
68+ NaiveDateTime :: parse_from_str ( & decoded, format) ?,
69+ offset,
70+ )
71+ . with_timezone ( & Utc ) )
72+ } else {
73+ bail ! ( ASN1NAPIError :: MalformedData )
74+ }
7175 } else {
7276 bail ! ( ASN1NAPIError :: MalformedData )
7377 }
@@ -82,12 +86,15 @@ pub(crate) fn get_fixed_date_from_js(data: JsUnknown) -> Result<DateTime<FixedOf
8286 let timestamp = js_date. value_of ( ) ? as i64 ;
8387 let ts_secs = timestamp / 1000 ;
8488 let ts_ns = ( ( timestamp % 1000 ) * 1_000_000 ) as u32 ;
85- let naive = NaiveDateTime :: from_timestamp ( ts_secs, ts_ns) ;
8689
87- Ok ( DateTime :: < FixedOffset > :: from_utc (
88- naive,
89- FixedOffset :: east ( 0 ) ,
90- ) )
90+ if let ( Some ( datetime) , Some ( offset) ) = (
91+ NaiveDateTime :: from_timestamp_opt ( ts_secs, ts_ns) ,
92+ FixedOffset :: east_opt ( 0 ) ,
93+ ) {
94+ Ok ( DateTime :: < FixedOffset > :: from_utc ( datetime, offset) )
95+ } else {
96+ bail ! ( ASN1NAPIError :: MalformedData )
97+ }
9198}
9299
93100/// Get an ASN1 boolean from a JsUnknown.
@@ -201,14 +208,14 @@ mod test {
201208
202209 #[ test]
203210 fn test_get_utc_date_time_from_asn1_milli ( ) {
204- let date = Utc . ymd ( 2022 , 6 , 22 ) . and_hms_milli ( 18 , 18 , 0 , 210 ) ;
211+ let date = Utc . timestamp_millis_opt ( 1655921880210 ) . unwrap ( ) ;
205212 let input = [
206213 24 , 19 , 50 , 48 , 50 , 50 , 48 , 54 , 50 , 50 , 49 , 56 , 49 , 56 , 48 , 48 , 46 , 50 , 49 , 48 , 90 ,
207214 ] ;
208215
209216 assert_eq ! ( get_utc_date_time_from_asn1_milli( & input) . unwrap( ) , date) ;
210217
211- let date = Utc . ymd ( 2022 , 9 , 26 ) . and_hms_milli ( 10 , 0 , 0 , 0 ) ;
218+ let date = Utc . with_ymd_and_hms ( 2022 , 9 , 26 , 10 , 0 , 0 ) . unwrap ( ) ;
212219 let input = [
213220 24 , 15 , 50 , 48 , 50 , 50 , 48 , 57 , 50 , 54 , 49 , 48 , 48 , 48 , 48 , 48 , 90 ,
214221 ] ;
0 commit comments