From 38785144da5f15160cedc9fec28f746f1ad8f236 Mon Sep 17 00:00:00 2001 From: bcapuano Date: Sat, 4 Nov 2023 12:05:43 -0400 Subject: [PATCH] Updated fuzzer to support multiple in from_ical --- CHANGES.rst | 2 +- src/icalendar/fuzzing/ical_fuzzer.py | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index fc79588..10fe416 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,7 +6,7 @@ Changelog Minor changes: -- ... +- Augmented fuzzer to optionally convert multiple calendars from a source string Breaking changes: diff --git a/src/icalendar/fuzzing/ical_fuzzer.py b/src/icalendar/fuzzing/ical_fuzzer.py index bffd078..d405dac 100644 --- a/src/icalendar/fuzzing/ical_fuzzer.py +++ b/src/icalendar/fuzzing/ical_fuzzer.py @@ -28,19 +28,28 @@ _value_error_matches = [ ] +def _fuzz_calendar(cal: icalendar.Calendar, should_walk: bool): + if should_walk: + for event in cal.walk('VEVENT'): + event.to_ical() + else: + cal.to_ical() + + @atheris.instrument_func def TestOneInput(data): fdp = atheris.FuzzedDataProvider(data) try: - b = fdp.ConsumeBool() + multiple = fdp.ConsumeBool() + should_walk = fdp.ConsumeBool() - cal = icalendar.Calendar.from_ical(fdp.ConsumeString(fdp.remaining_bytes())) + cal = icalendar.Calendar.from_ical(fdp.ConsumeString(fdp.remaining_bytes()), multiple=multiple) - if b: - for event in cal.walk('VEVENT'): - event.to_ical().decode('utf-8') + if multiple: + for c in cal: + _fuzz_calendar(c, should_walk) else: - cal.to_ical() + _fuzz_calendar(cal, should_walk) except ValueError as e: if any(m in str(e) for m in _value_error_matches): return -1