-
Notifications
You must be signed in to change notification settings - Fork 231
Closed
Labels
C-calendarComponent: CalendarsComponent: Calendars
Description
I haven't even finished writing this fuzzer and I found a bug
FuzzInput {
year: 889192448,
month: 0,
day: 0,
month_interpretation: Ordinal,
overflow_constrain: false,
cal: Dangi,
}
thread '<unnamed>' (1026981) panicked at components/calendar/src/cal/chinese/simple.rs:93:32:
attempt to multiply with overflow
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
==1026981== ERROR: libFuzzer: deadly signal
Currently this just sets year and day, ignoring month entirely. I could clean this up into a proper testcase but i'd like to actually finished the fuzzer.
Fuzzer code:
#[derive(Arbitrary, Debug)]
struct FuzzInput {
year: i32,
month: u8,
day: u8,
month_interpretation: MonthInterpretation,
overflow_constrain: bool,
cal: AnyCalendarKind,
}
#[derive(Arbitrary, Debug)]
enum MonthInterpretation {
Ordinal,
CodeNormal,
CodeLeap,
}
#[derive(Arbitrary, Debug)]
pub enum AnyCalendarKind {
Buddhist,
Chinese,
Coptic,
Dangi,
Ethiopian,
EthiopianAmeteAlem,
Gregorian,
Hebrew,
Indian,
HijriTabularTypeIIFriday,
HijriSimulatedMecca,
HijriTabularTypeIIThursday,
HijriUmmAlQura,
Iso,
Japanese,
JapaneseExtended,
Persian,
Roc,
}
impl From<AnyCalendarKind> for icu_calendar::AnyCalendarKind {
fn from(other: AnyCalendarKind) -> Self {
match other {
AnyCalendarKind::Buddhist => Self::Buddhist,
AnyCalendarKind::Chinese => Self::Chinese,
AnyCalendarKind::Coptic => Self::Coptic,
AnyCalendarKind::Dangi => Self::Dangi,
AnyCalendarKind::Ethiopian => Self::Ethiopian,
AnyCalendarKind::EthiopianAmeteAlem => Self::EthiopianAmeteAlem,
AnyCalendarKind::Gregorian => Self::Gregorian,
AnyCalendarKind::Hebrew => Self::Hebrew,
AnyCalendarKind::Indian => Self::Indian,
AnyCalendarKind::HijriTabularTypeIIFriday => Self::HijriTabularTypeIIFriday,
AnyCalendarKind::HijriSimulatedMecca => Self::HijriSimulatedMecca,
AnyCalendarKind::HijriTabularTypeIIThursday => Self::HijriTabularTypeIIThursday,
AnyCalendarKind::HijriUmmAlQura => Self::HijriUmmAlQura,
AnyCalendarKind::Iso => Self::Iso,
AnyCalendarKind::Japanese => Self::Japanese,
AnyCalendarKind::JapaneseExtended => Self::JapaneseExtended,
AnyCalendarKind::Persian => Self::Persian,
AnyCalendarKind::Roc => Self::Roc,
}
}
}
fuzz_target!(|data: FuzzInput| {
let calendar = AnyCalendar::new(data.cal.into());
let mut options = DateFromFieldsOptions::default();
options.overflow = if data.overflow_constrain {
Some(Overflow::Constrain)
} else {
Some(Overflow::Reject)
};
let mut fields = DateFields::default();
fields.extended_year = Some(data.year);
fields.day = NonZeroU8::new(data.day);
let date = Date::try_from_fields(fields, options, calendar);
});Metadata
Metadata
Assignees
Labels
C-calendarComponent: CalendarsComponent: Calendars