diff --git a/projects/azure-sdk-for-python/Dockerfile b/projects/azure-sdk-for-python/Dockerfile new file mode 100644 index 000000000..a48773699 --- /dev/null +++ b/projects/azure-sdk-for-python/Dockerfile @@ -0,0 +1,18 @@ +#!/usr/bin/python3 +# Copyright 2023 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. +FROM gcr.io/oss-fuzz-base/base-builder-python +RUN git clone https://github.com/azure/azure-sdk-for-python azure-sdk-for-python +COPY *.sh *py $SRC/ +WORKDIR $SRC/azure-sdk-for-python diff --git a/projects/azure-sdk-for-python/build.sh b/projects/azure-sdk-for-python/build.sh new file mode 100644 index 000000000..d0a660c91 --- /dev/null +++ b/projects/azure-sdk-for-python/build.sh @@ -0,0 +1,24 @@ +#!/bin/bash -eu +# Copyright 2023 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. +# +################################################################################ + +cd $SRC/azure-sdk-for-python/sdk/core/azure-core +pip3 install . + +cd $SRC/azure-sdk-for-python/sdk/dynatrace/azure-mgmt-dynatrace/ +pip3 install . + +compile_python_fuzzer $SRC/fuzz_mgmt_serialization.py diff --git a/projects/azure-sdk-for-python/fuzz_mgmt_serialization.py b/projects/azure-sdk-for-python/fuzz_mgmt_serialization.py new file mode 100644 index 000000000..27d743924 --- /dev/null +++ b/projects/azure-sdk-for-python/fuzz_mgmt_serialization.py @@ -0,0 +1,67 @@ +#!/usr/bin/python3 +# Copyright 2023 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 sys +import json +import atheris + +from azure.mgmt.dynatrace import _serialization +from azure.mgmt.dynatrace.models import _models_py3 +from azure.core.exceptions import ( + DeserializationError, + SerializationError +) + + +def TestOneInput(data): + fdp = atheris.FuzzedDataProvider(data) + + try: + payload = json.loads(fdp.ConsumeUnicodeNoSurrogates(sys.maxsize)) + except: + return + model = _models_py3.AccountInfo() + + # Overwrite the types, this is easier than creating a new class. + model._attribute_map = payload + + try: + serialized_data = model.serialize() + serialized = True + except SerializationError: + serialized = False + + deserializer = _serialization.Deserializer() + if serialized: + # Anything serialized should be unserializable + deserializer._deserialize(model, serialized_data) + else: + # Otherwise we deserialize random data and catch exceptions + try: + deserializer._deserialize( + model, + fdp.ConsumeUnicodeNoSurrogates(sys.maxsize) + ) + except DeserializationError: + pass + + +def main(): + atheris.instrument_all() + atheris.Setup(sys.argv, TestOneInput) + atheris.Fuzz() + + +if __name__ == "__main__": + main() diff --git a/projects/azure-sdk-for-python/project.yaml b/projects/azure-sdk-for-python/project.yaml new file mode 100644 index 000000000..63d780b11 --- /dev/null +++ b/projects/azure-sdk-for-python/project.yaml @@ -0,0 +1,10 @@ +fuzzing_engines: +- libfuzzer +homepage: https://github.com/azure/azure-sdk-for-python +language: python +main_repo: https://github.com/azure/azure-sdk-for-python +sanitizers: +- address +- undefined +vendor_ccs: +- david@adalogics.com \ No newline at end of file