From ffbaa6523d7b567e0be07aeb0e5c9620a375ac24 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Thu, 7 Jan 2021 12:51:34 +0100 Subject: [PATCH 1/3] Internal support for oss-fuzz testing --- Tests/oss-fuzz/fuzz_pillow.py | 45 +++++++++++++++++++++++++++++++++++ setup.py | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 Tests/oss-fuzz/fuzz_pillow.py diff --git a/Tests/oss-fuzz/fuzz_pillow.py b/Tests/oss-fuzz/fuzz_pillow.py new file mode 100644 index 000000000..585f53486 --- /dev/null +++ b/Tests/oss-fuzz/fuzz_pillow.py @@ -0,0 +1,45 @@ +#!/usr/bin/python3 + +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import atheris_no_libfuzzer as atheris +import sys +import os +import io +import warnings +from PIL import Image, ImageFile, ImageFilter + +def TestOneInput(data): + try: + with Image.open(io.BytesIO(data)) as im: + im.rotate(45) + im.filter(ImageFilter.DETAIL) + im.save(io.BytesIO(), "BMP") + except Exception: + # We're catching all exceptions because Pillow's exceptions are + # directly inheriting from Exception. + return + return + +def main(): + ImageFile.LOAD_TRUNCATED_IMAGES = True + warnings.filterwarnings("ignore") + warnings.simplefilter('error', Image.DecompressionBombWarning) + atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) + atheris.Fuzz() + +if __name__ == "__main__": + main() + diff --git a/setup.py b/setup.py index cbc2641c5..41e8a4630 100755 --- a/setup.py +++ b/setup.py @@ -840,7 +840,7 @@ class pil_build_ext(build_ext): def debug_build(): - return hasattr(sys, "gettotalrefcount") + return hasattr(sys, "gettotalrefcount") or os.environ.get("LIB_FUZZING_ENGINE", None) files = ["src/_imaging.c"] From 37a7c601cc8ec34439d026d07fa19a6049b53bf7 Mon Sep 17 00:00:00 2001 From: Eric Soroos Date: Thu, 7 Jan 2021 13:07:28 +0100 Subject: [PATCH 2/3] uglify --- Tests/oss-fuzz/fuzz_pillow.py | 20 ++++++++++++-------- setup.py | 4 +++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Tests/oss-fuzz/fuzz_pillow.py b/Tests/oss-fuzz/fuzz_pillow.py index 585f53486..b2b2ba65a 100644 --- a/Tests/oss-fuzz/fuzz_pillow.py +++ b/Tests/oss-fuzz/fuzz_pillow.py @@ -14,32 +14,36 @@ # See the License for the specific language governing permissions and # limitations under the License. -import atheris_no_libfuzzer as atheris -import sys -import os import io +import os +import sys import warnings + +import atheris_no_libfuzzer as atheris + from PIL import Image, ImageFile, ImageFilter + def TestOneInput(data): try: with Image.open(io.BytesIO(data)) as im: - im.rotate(45) - im.filter(ImageFilter.DETAIL) - im.save(io.BytesIO(), "BMP") + im.rotate(45) + im.filter(ImageFilter.DETAIL) + im.save(io.BytesIO(), "BMP") except Exception: # We're catching all exceptions because Pillow's exceptions are # directly inheriting from Exception. return return + def main(): ImageFile.LOAD_TRUNCATED_IMAGES = True warnings.filterwarnings("ignore") - warnings.simplefilter('error', Image.DecompressionBombWarning) + warnings.simplefilter("error", Image.DecompressionBombWarning) atheris.Setup(sys.argv, TestOneInput, enable_python_coverage=True) atheris.Fuzz() + if __name__ == "__main__": main() - diff --git a/setup.py b/setup.py index 41e8a4630..dd1772ae0 100755 --- a/setup.py +++ b/setup.py @@ -840,7 +840,9 @@ class pil_build_ext(build_ext): def debug_build(): - return hasattr(sys, "gettotalrefcount") or os.environ.get("LIB_FUZZING_ENGINE", None) + return hasattr(sys, "gettotalrefcount") or os.environ.get( + "LIB_FUZZING_ENGINE", None + ) files = ["src/_imaging.c"] From eaeaa181dd0b414d85597d15c28a87197db837b3 Mon Sep 17 00:00:00 2001 From: Andrew Murray <3112309+radarhere@users.noreply.github.com> Date: Thu, 7 Jan 2021 23:18:24 +1100 Subject: [PATCH 3/3] Removed unused import --- Tests/oss-fuzz/fuzz_pillow.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Tests/oss-fuzz/fuzz_pillow.py b/Tests/oss-fuzz/fuzz_pillow.py index b2b2ba65a..894068f63 100644 --- a/Tests/oss-fuzz/fuzz_pillow.py +++ b/Tests/oss-fuzz/fuzz_pillow.py @@ -15,7 +15,6 @@ # limitations under the License. import io -import os import sys import warnings