@@ -7,12 +7,16 @@ use crate::options::{DateFromFieldsOptions, MissingFieldsStrategy, Overflow};
77use crate :: types:: { DateFields , DayOfYear , MonthCode } ;
88use crate :: { types, Calendar , DateDuration , DateDurationUnit , DateError , RangeError } ;
99use core:: cmp:: Ordering ;
10+ use core:: ops:: RangeInclusive ;
1011use core:: convert:: TryInto ;
1112use core:: fmt:: Debug ;
1213use core:: hash:: { Hash , Hasher } ;
1314use core:: marker:: PhantomData ;
1415use tinystr:: tinystr;
1516
17+ /// The range ±2²⁷. We use i32::MIN since it is -2³¹
18+ const VALID_YEAR_RANGE : RangeInclusive < i32 > = ( i32:: MIN / 16 ) ..=-( i32:: MIN / 16 ) ;
19+
1620#[ derive( Debug ) ]
1721#[ allow( clippy:: exhaustive_structs) ] // this type is stable
1822pub ( crate ) struct ArithmeticDate < C : CalendarArithmetic > {
@@ -492,7 +496,7 @@ where
492496 } ,
493497 } ,
494498 ( Some ( era) , Some ( era_year) ) => {
495- range_check ( era_year, "year" , - 1_000_000 ..= 1_000_000 ) ?;
499+ range_check ( era_year, "year" , VALID_YEAR_RANGE ) ?;
496500 let era_year_as_year_info = cal. year_info_from_era ( era, era_year) ?;
497501 if let Some ( extended_year) = fields. extended_year {
498502 if era_year_as_year_info != extended_year_as_year_info ( extended_year, cal) ?
0 commit comments