From 29cd5baa8174ec1084db8026f31162074fe9c45d Mon Sep 17 00:00:00 2001 From: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com> Date: Fri, 19 Dec 2025 09:18:10 -0500 Subject: [PATCH 1/7] Remove oss-fuzz/worker and oss-fuzz/host images. (#5094) They are supporting a model that no longer exists. --- docker/README.md | 7 +- docker/build.sh | 2 - docker/oss-fuzz/host-high-end/CHANGELOG.md | 2 +- docker/oss-fuzz/host-high-end/Dockerfile | 2 +- .../host-high-end/ubuntu-20-04.Dockerfile | 2 +- .../host-high-end/ubuntu-24-04.Dockerfile | 2 +- docker/oss-fuzz/host/CHANGELOG.md | 26 ------ docker/oss-fuzz/host/Dockerfile | 23 ----- docker/oss-fuzz/host/start_host.py | 91 ------------------- docker/oss-fuzz/host/ubuntu-20-04.Dockerfile | 23 ----- docker/oss-fuzz/host/ubuntu-24-04.Dockerfile | 23 ----- docker/oss-fuzz/worker/CHANGELOG.md | 33 ------- docker/oss-fuzz/worker/Dockerfile | 17 ---- .../oss-fuzz/worker/ubuntu-20-04.Dockerfile | 17 ---- .../oss-fuzz/worker/ubuntu-24-04.Dockerfile | 17 ---- 15 files changed, 5 insertions(+), 282 deletions(-) delete mode 100644 docker/oss-fuzz/host/CHANGELOG.md delete mode 100644 docker/oss-fuzz/host/Dockerfile delete mode 100755 docker/oss-fuzz/host/start_host.py delete mode 100644 docker/oss-fuzz/host/ubuntu-20-04.Dockerfile delete mode 100644 docker/oss-fuzz/host/ubuntu-24-04.Dockerfile delete mode 100644 docker/oss-fuzz/worker/CHANGELOG.md delete mode 100644 docker/oss-fuzz/worker/Dockerfile delete mode 100644 docker/oss-fuzz/worker/ubuntu-20-04.Dockerfile delete mode 100644 docker/oss-fuzz/worker/ubuntu-24-04.Dockerfile diff --git a/docker/README.md b/docker/README.md index cfa66a0c2a8..2d0c7d1c78b 100644 --- a/docker/README.md +++ b/docker/README.md @@ -75,8 +75,6 @@ graph TD subgraph OSS-Fuzz H(oss-fuzz/base) - N(oss-fuzz/worker) - O(oss-fuzz/host) P(oss-fuzz/host-high-end) end @@ -103,8 +101,5 @@ graph TD F --> L; F --> M; - H --> N; - H --> O; - - O --> P; + H --> P; ``` \ No newline at end of file diff --git a/docker/build.sh b/docker/build.sh index cea0d3a2d4c..4695c2ba1c1 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -22,9 +22,7 @@ IMAGES=( gcr.io/clusterfuzz-images/chromium/tester gcr.io/clusterfuzz-images/chromium/tests-syncer gcr.io/clusterfuzz-images/oss-fuzz/base - gcr.io/clusterfuzz-images/oss-fuzz/host gcr.io/clusterfuzz-images/oss-fuzz/host-high-end - gcr.io/clusterfuzz-images/oss-fuzz/worker gcr.io/clusterfuzz-images/ci gcr.io/clusterfuzz-images/utask-main-scheduler gcr.io/clusterfuzz-images/tworker diff --git a/docker/oss-fuzz/host-high-end/CHANGELOG.md b/docker/oss-fuzz/host-high-end/CHANGELOG.md index dfd37711ac3..c37cfaa6605 100644 --- a/docker/oss-fuzz/host-high-end/CHANGELOG.md +++ b/docker/oss-fuzz/host-high-end/CHANGELOG.md @@ -21,6 +21,6 @@ The package lists for all three images are identical to their respective base im ## Dockerfile Analysis -The `oss-fuzz-host-high-end` Dockerfile is a minimal "wrapper" image. Its only purpose is to inherit from a `clusterfuzz/oss-fuzz/host` image and set a few environment variables. It does not install any packages or perform any configurations itself. +The `oss-fuzz-host-high-end` Dockerfile is a minimal "wrapper" image. Its only purpose is to inherit from a `clusterfuzz/oss-fuzz/base` image and set a few environment variables. It does not install any packages or perform any configurations itself. Because of this simplicity, the only change required to upgrade from `latest`/`ubuntu20` to `ubuntu24` is updating the `FROM` instruction to point to the corresponding `ubuntu24-04` tag of the host image. All package differences are inherited directly from this base image change. diff --git a/docker/oss-fuzz/host-high-end/Dockerfile b/docker/oss-fuzz/host-high-end/Dockerfile index 4ab9c9ac542..e0384fa7836 100644 --- a/docker/oss-fuzz/host-high-end/Dockerfile +++ b/docker/oss-fuzz/host-high-end/Dockerfile @@ -11,7 +11,7 @@ # 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/clusterfuzz-images/oss-fuzz/host +FROM gcr.io/clusterfuzz-images/oss-fuzz/base # Run less instances of ClusterFuzz on these so that each instance has more # resoures. diff --git a/docker/oss-fuzz/host-high-end/ubuntu-20-04.Dockerfile b/docker/oss-fuzz/host-high-end/ubuntu-20-04.Dockerfile index 44c1180d73e..a175337ee92 100644 --- a/docker/oss-fuzz/host-high-end/ubuntu-20-04.Dockerfile +++ b/docker/oss-fuzz/host-high-end/ubuntu-20-04.Dockerfile @@ -11,7 +11,7 @@ # 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/clusterfuzz-images/oss-fuzz/host:ubuntu-20-04 +FROM gcr.io/clusterfuzz-images/oss-fuzz/base:ubuntu-20-04 # Run less instances of ClusterFuzz on these so that each instance has more # resoures. diff --git a/docker/oss-fuzz/host-high-end/ubuntu-24-04.Dockerfile b/docker/oss-fuzz/host-high-end/ubuntu-24-04.Dockerfile index f5e0269e6c4..908d2f9b5a1 100644 --- a/docker/oss-fuzz/host-high-end/ubuntu-24-04.Dockerfile +++ b/docker/oss-fuzz/host-high-end/ubuntu-24-04.Dockerfile @@ -11,7 +11,7 @@ # 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/clusterfuzz-images/oss-fuzz/host:ubuntu-24-04 +FROM gcr.io/clusterfuzz-images/oss-fuzz/base:ubuntu-24-04 # Run less instances of ClusterFuzz on these so that each instance has more # resoures. diff --git a/docker/oss-fuzz/host/CHANGELOG.md b/docker/oss-fuzz/host/CHANGELOG.md deleted file mode 100644 index 480d0143a43..00000000000 --- a/docker/oss-fuzz/host/CHANGELOG.md +++ /dev/null @@ -1,26 +0,0 @@ -# Docker Image Version Changelog: clusterfuzz/oss-fuzz-host - - -## Analysis Summary - -The `latest` and `ubuntu20` images are based on Ubuntu 20.04, while the `ubuntu24` image is based on Ubuntu 24.04. All three images were built successfully and passed health checks. All three images required a modified entrypoint to run and perform health checks due to a startup script that depends on a GCE metadata service. The `ubuntu24` image appears to be a viable replacement, but the package differences should be reviewed for compatibility. - -## Build Status - -| Image Tag | Dockerfile | Status | -| ------------------------------- | ------------------------ | ------- | -| `clusterfuzz/oss-fuzz-host:latest` | `Dockerfile` | Success | -| `clusterfuzz/oss-fuzz-host:ubuntu20`| `ubuntu20-04.Dockerfile` | Success | -| `clusterfuzz/oss-fuzz-host:ubuntu24`| `ubuntu24-04.Dockerfile` | Success | - -## Package Comparison - -### Key Differences (Ubuntu 20.04 vs. Ubuntu 24.04) - -The package lists for all three images are identical to their respective base images. The `ubuntu24` image includes a large number of updated packages compared to the `ubuntu20` and `latest` images. - -## Dockerfile Analysis - -The `oss-fuzz-host` Dockerfile is a minimal "wrapper" image. Its only purpose is to inherit from a `clusterfuzz/oss-fuzz/base` image, copy a startup script (`start_host.py`), and set its permissions. It does not install any packages or perform any configurations itself. - -Because of this simplicity, the only change required to upgrade from `latest`/`ubuntu20` to `ubuntu24` is updating the `FROM` instruction to point to the corresponding `ubuntu24-04` tag of the base image. All package differences are inherited directly from this base image change. diff --git a/docker/oss-fuzz/host/Dockerfile b/docker/oss-fuzz/host/Dockerfile deleted file mode 100644 index 0d5a036b458..00000000000 --- a/docker/oss-fuzz/host/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2019 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/clusterfuzz-images/oss-fuzz/base - -COPY start_host.py /data -RUN chmod 644 /data/start_host.py - -ENV NUM_WORKERS_PER_HOST 16 -ENV DISABLE_MOUNTS True -ENV TRUSTED_HOST True - -ENV RUN_CMD "python3.11 /data/start_host.py" diff --git a/docker/oss-fuzz/host/start_host.py b/docker/oss-fuzz/host/start_host.py deleted file mode 100755 index 674f34ef031..00000000000 --- a/docker/oss-fuzz/host/start_host.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright 2019 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. -"""Start host.""" - -import os -import shutil -import socket -import subprocess -import sys -import threading -import time - -MNT_DIR = '/mnt/scratch0' -SRC_DIR = os.path.join(MNT_DIR, 'clusterfuzz') -BOT_BASEDIR = os.path.join(MNT_DIR, 'bots') - -NUM_WORKERS_PER_HOST = int(os.environ['NUM_WORKERS_PER_HOST']) - - -def setup_environment(): - """Set up host environment.""" - os.environ['QUEUE_OVERRIDE'] = 'LINUX_UNTRUSTED' - os.environ['WORKER_ROOT_DIR'] = os.path.join(MNT_DIR, 'clusterfuzz') - os.environ['WORKER_BOT_TMPDIR'] = os.path.join(MNT_DIR, 'tmp') - - if not os.path.exists(BOT_BASEDIR): - os.mkdir(BOT_BASEDIR) - - -def start_bot_instance(instance_num): - """Set up bot directory.""" - env = os.environ.copy() - - host_name = os.getenv('HOSTNAME', socket.gethostname()) - bot_name = '%s-%d' % (host_name, instance_num) - env['BOT_NAME'] = bot_name - env['HOST_INSTANCE_NAME'] = host_name - env['HOST_INSTANCE_NUM'] = str(instance_num) - - bot_directory = os.path.join(BOT_BASEDIR, bot_name) - bot_root_directory = os.path.join(bot_directory, 'clusterfuzz') - tmp_directory = os.path.join(bot_directory, 'tmp') - if not os.path.exists(bot_directory): - os.mkdir(bot_directory) - os.mkdir(tmp_directory) - - env['ROOT_DIR'] = bot_root_directory - env['BOT_TMPDIR'] = tmp_directory - env['PYTHONPATH'] = os.path.join(bot_root_directory, 'src') - - if os.path.exists(bot_root_directory): - shutil.rmtree(bot_root_directory) - - shutil.copytree(SRC_DIR, bot_root_directory) - - while True: - bot_proc = subprocess.Popen( - sys.executable + ' src/python/bot/startup/run.py 2>&1 > console.txt', - shell=True, - env=env, - cwd=bot_root_directory) - bot_proc.wait() - print('Instance %i exited.' % instance_num, file=sys.stderr) - - -def main(): - setup_environment() - - for i in range(NUM_WORKERS_PER_HOST): - print('Starting bot %i.' % i) - thread = threading.Thread(target=start_bot_instance, args=(i,)) - thread.start() - - while True: - # sleep forever - time.sleep(1000) - - -if __name__ == '__main__': - main() diff --git a/docker/oss-fuzz/host/ubuntu-20-04.Dockerfile b/docker/oss-fuzz/host/ubuntu-20-04.Dockerfile deleted file mode 100644 index e0e073d9423..00000000000 --- a/docker/oss-fuzz/host/ubuntu-20-04.Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/oss-fuzz/base:ubuntu-20-04 - -COPY start_host.py /data -RUN chmod 644 /data/start_host.py - -ENV NUM_WORKERS_PER_HOST 16 -ENV DISABLE_MOUNTS True -ENV TRUSTED_HOST True - -ENV RUN_CMD "python3.11 /data/start_host.py" diff --git a/docker/oss-fuzz/host/ubuntu-24-04.Dockerfile b/docker/oss-fuzz/host/ubuntu-24-04.Dockerfile deleted file mode 100644 index 80188efb4cd..00000000000 --- a/docker/oss-fuzz/host/ubuntu-24-04.Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/oss-fuzz/base:ubuntu-24-04 - -COPY start_host.py /data -RUN chmod 644 /data/start_host.py - -ENV NUM_WORKERS_PER_HOST 16 -ENV DISABLE_MOUNTS True -ENV TRUSTED_HOST True - -ENV RUN_CMD "python3.11 /data/start_host.py" diff --git a/docker/oss-fuzz/worker/CHANGELOG.md b/docker/oss-fuzz/worker/CHANGELOG.md deleted file mode 100644 index 0d60debcdc5..00000000000 --- a/docker/oss-fuzz/worker/CHANGELOG.md +++ /dev/null @@ -1,33 +0,0 @@ -# Docker Image Version Changelog: clusterfuzz/oss-fuzz-worker - - -## Analysis Summary - -The `latest` and `ubuntu20` images are based on Ubuntu 20.04, while the `ubuntu24` image is based on Ubuntu 24.04. All three images were built successfully and passed health checks. All three images required a modified entrypoint to run and perform health checks due to a startup script that depends on a GCE metadata service. The `ubuntu24` image appears to be a viable replacement, but the package differences should be reviewed for compatibility. - -## Build Status - -| Image Tag | Dockerfile | Status | -| ------------------------------- | ------------------------ | ------- | -| `clusterfuzz/oss-fuzz-worker:latest` | `Dockerfile` | Success | -| `clusterfuzz/oss-fuzz-worker:ubuntu20`| `ubuntu20-04.Dockerfile` | Success | -| `clusterfuzz/oss-fuzz-worker:ubuntu24`| `ubuntu24-04.Dockerfile` | Success | - -## Package Comparison - -### Key Differences (Ubuntu 20.04 vs. Ubuntu 24.04) - -The `ubuntu24` image includes a number of updated packages. The following are some of the most significant changes: - -| Package | Ubuntu 20.04 Version | Ubuntu 24.04 Version | Notes | -| ----------------------- | -------------------- | -------------------- | ----------------------------------- | -| `libc6-i386` | `2.31-0ubuntu9.16` | `2.39-0ubuntu8.5` | Upgraded in Ubuntu 24.04 | -| `lib32gcc-s1` | `10.5.0-1ubuntu1~20.04` | `14.1.0-1ubuntu1~24.04` | Upgraded in Ubuntu 24.04 | - -## Dockerfile Analysis - -The `latest` and `ubuntu20` Dockerfiles are very similar, with the main difference being the `FROM` instruction pointing to the corresponding `oss-fuzz/base` image tag. - -The `ubuntu24` Dockerfile introduces these key changes: -* **Base Image:** The `FROM` instruction is updated to `gcr.io/clusterfuzz-images/oss-fuzz/base:ubuntu-24-04`. -* **Package Name Change:** The package `lib32gcc1` (used in the latest Dockerfile) is updated to `lib32gcc-s1` in the `ubuntu20` and `ubuntu24` Dockerfiles to reflect changes in the Ubuntu package repositories. diff --git a/docker/oss-fuzz/worker/Dockerfile b/docker/oss-fuzz/worker/Dockerfile deleted file mode 100644 index acb9323853e..00000000000 --- a/docker/oss-fuzz/worker/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright 2019 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/clusterfuzz-images/oss-fuzz/base - -RUN apt-get install -y libc6-i386 lib32gcc1 -ENV UNTRUSTED_WORKER True diff --git a/docker/oss-fuzz/worker/ubuntu-20-04.Dockerfile b/docker/oss-fuzz/worker/ubuntu-20-04.Dockerfile deleted file mode 100644 index d72055b3984..00000000000 --- a/docker/oss-fuzz/worker/ubuntu-20-04.Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/oss-fuzz/base:ubuntu-20-04 - -RUN apt-get install -y libc6-i386 lib32gcc-s1 -ENV UNTRUSTED_WORKER True diff --git a/docker/oss-fuzz/worker/ubuntu-24-04.Dockerfile b/docker/oss-fuzz/worker/ubuntu-24-04.Dockerfile deleted file mode 100644 index e1c6596eb2e..00000000000 --- a/docker/oss-fuzz/worker/ubuntu-24-04.Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/oss-fuzz/base:ubuntu-24-04 - -RUN apt-get install -y libc6-i386 lib32gcc-s1 -ENV UNTRUSTED_WORKER True From d77bab0a3d339577acbfd72a0e6a16d396243ef9 Mon Sep 17 00:00:00 2001 From: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com> Date: Fri, 19 Dec 2025 09:28:34 -0500 Subject: [PATCH 2/7] Delete tester images (#5091) Progrollout replaced it. Fixes: #4320 --- docker/build-immutable.sh | 1 - docker/build.sh | 1 - docker/chromium/tester/CHANGELOG.md | 26 ------------------- docker/chromium/tester/Dockerfile | 16 ------------ .../chromium/tester/immutable/dev/Dockerfile | 26 ------------------- .../tester/immutable/internal/Dockerfile | 26 ------------------- .../tester/immutable/staging/Dockerfile | 26 ------------------- .../chromium/tester/ubuntu-20-04.Dockerfile | 16 ------------ .../chromium/tester/ubuntu-24-04.Dockerfile | 16 ------------ 9 files changed, 154 deletions(-) delete mode 100644 docker/chromium/tester/CHANGELOG.md delete mode 100644 docker/chromium/tester/Dockerfile delete mode 100644 docker/chromium/tester/immutable/dev/Dockerfile delete mode 100644 docker/chromium/tester/immutable/internal/Dockerfile delete mode 100644 docker/chromium/tester/immutable/staging/Dockerfile delete mode 100644 docker/chromium/tester/ubuntu-20-04.Dockerfile delete mode 100644 docker/chromium/tester/ubuntu-24-04.Dockerfile diff --git a/docker/build-immutable.sh b/docker/build-immutable.sh index 586b400c279..88deddb63fc 100755 --- a/docker/build-immutable.sh +++ b/docker/build-immutable.sh @@ -23,7 +23,6 @@ IMAGES=( gcr.io/clusterfuzz-images/base/immutable gcr.io/clusterfuzz-images/chromium/base/immutable gcr.io/clusterfuzz-images/chromium/builder/immutable - gcr.io/clusterfuzz-images/chromium/tester/immutable gcr.io/clusterfuzz-images/tworker/immutable gcr.io/clusterfuzz-images/utask-main-scheduler/immutable gcr.io/clusterfuzz-images/fuchsia/immutable diff --git a/docker/build.sh b/docker/build.sh index 4695c2ba1c1..29e1945149a 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -19,7 +19,6 @@ IMAGES=( gcr.io/clusterfuzz-images/chromium/base gcr.io/clusterfuzz-images/chromium/builder gcr.io/clusterfuzz-images/chromium/high-end - gcr.io/clusterfuzz-images/chromium/tester gcr.io/clusterfuzz-images/chromium/tests-syncer gcr.io/clusterfuzz-images/oss-fuzz/base gcr.io/clusterfuzz-images/oss-fuzz/host-high-end diff --git a/docker/chromium/tester/CHANGELOG.md b/docker/chromium/tester/CHANGELOG.md deleted file mode 100644 index faf0cd4ce8b..00000000000 --- a/docker/chromium/tester/CHANGELOG.md +++ /dev/null @@ -1,26 +0,0 @@ -# Docker Image Version Changelog: clusterfuzz/chromium-tester - - -## Analysis Summary - -The `latest` and `ubuntu20` images are based on Ubuntu 20.04, while the `ubuntu24` image is based on Ubuntu 24.04. All three images were built successfully and passed health checks. All three images required a modified entrypoint to run and perform health checks due to a startup script that depends on a GCE metadata service. The `ubuntu24` image appears to be a viable replacement, but the package differences should be reviewed for compatibility. - -## Build Status - -| Image Tag | Dockerfile | Status | -| ------------------------------- | ------------------------ | ------- | -| `clusterfuzz/chromium-tester:latest` | `Dockerfile` | Success | -| `clusterfuzz/chromium-tester:ubuntu20`| `ubuntu20-04.Dockerfile` | Success | -| `clusterfuzz/chromium-tester:ubuntu24`| `ubuntu24-04.Dockerfile` | Success | - -## Package Comparison - -### Key Differences (Ubuntu 20.04 vs. Ubuntu 24.04) - -The package lists for all three images are identical to their respective base images. The `ubuntu24` image includes a large number of updated packages compared to the `ubuntu20` and `latest` images. - -## Dockerfile Analysis - -The `chromium-tester` Dockerfile is a minimal "wrapper" image. Its only purpose is to inherit from a `clusterfuzz/chromium/base` image and set a single environment variable (`RUN_CMD`). It does not install any packages or perform any configurations itself. - -Because of this simplicity, the only change required to upgrade from `latest`/`ubuntu20` to `ubuntu24` is updating the `FROM` instruction to point to the corresponding `ubuntu24-04` tag of the base image. All package differences are inherited directly from this base image change. diff --git a/docker/chromium/tester/Dockerfile b/docker/chromium/tester/Dockerfile deleted file mode 100644 index a45ac4961e4..00000000000 --- a/docker/chromium/tester/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2024 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/clusterfuzz-images/chromium/base - -ENV USE_TEST_DEPLOYMENT True \ No newline at end of file diff --git a/docker/chromium/tester/immutable/dev/Dockerfile b/docker/chromium/tester/immutable/dev/Dockerfile deleted file mode 100644 index b5f01537565..00000000000 --- a/docker/chromium/tester/immutable/dev/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/chromium/tester - -ENV IMMUTABLE_IMAGE=true - -ARG CLUSTERFUZZ_SOURCE_DIR - -COPY ${CLUSTERFUZZ_SOURCE_DIR} /data/clusterfuzz - -RUN cd /data/clusterfuzz && bash local/install_deps.bash - -COPY ${CLUSTERFUZZ_SOURCE_DIR}/clusterfuzz-config/configs/chrome-development /data/clusterfuzz/src/appengine/config - -RUN rm -rf /data/clusterfuzz/clusterfuzz-config diff --git a/docker/chromium/tester/immutable/internal/Dockerfile b/docker/chromium/tester/immutable/internal/Dockerfile deleted file mode 100644 index ee6ebe821e7..00000000000 --- a/docker/chromium/tester/immutable/internal/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/chromium/tester - -ENV IMMUTABLE_IMAGE=true - -ARG CLUSTERFUZZ_SOURCE_DIR - -COPY ${CLUSTERFUZZ_SOURCE_DIR} /data/clusterfuzz - -RUN cd /data/clusterfuzz && bash local/install_deps.bash - -COPY ${CLUSTERFUZZ_SOURCE_DIR}/clusterfuzz-config/configs/internal /data/clusterfuzz/src/appengine/config - -RUN rm -rf /data/clusterfuzz/clusterfuzz-config diff --git a/docker/chromium/tester/immutable/staging/Dockerfile b/docker/chromium/tester/immutable/staging/Dockerfile deleted file mode 100644 index 92c0cfec0c3..00000000000 --- a/docker/chromium/tester/immutable/staging/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/chromium/tester - -ENV IMMUTABLE_IMAGE=true - -ARG CLUSTERFUZZ_SOURCE_DIR - -COPY ${CLUSTERFUZZ_SOURCE_DIR} /data/clusterfuzz - -RUN cd /data/clusterfuzz && bash local/install_deps.bash - -COPY ${CLUSTERFUZZ_SOURCE_DIR}/clusterfuzz-config/configs/chrome-staging /data/clusterfuzz/src/appengine/config - -RUN rm -rf /data/clusterfuzz/clusterfuzz-config diff --git a/docker/chromium/tester/ubuntu-20-04.Dockerfile b/docker/chromium/tester/ubuntu-20-04.Dockerfile deleted file mode 100644 index 751e5ff2a63..00000000000 --- a/docker/chromium/tester/ubuntu-20-04.Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/chromium/base:ubuntu-20-04 - -ENV USE_TEST_DEPLOYMENT True \ No newline at end of file diff --git a/docker/chromium/tester/ubuntu-24-04.Dockerfile b/docker/chromium/tester/ubuntu-24-04.Dockerfile deleted file mode 100644 index 98700388234..00000000000 --- a/docker/chromium/tester/ubuntu-24-04.Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2025 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/clusterfuzz-images/chromium/base:ubuntu-24-04 - -ENV USE_TEST_DEPLOYMENT True \ No newline at end of file From 854f2869aff81fddedd8f4d027385a2f72f5d716 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 22 Dec 2025 13:07:48 -0500 Subject: [PATCH 3/7] Download databundles for non engine jobs (#5085) This fixes b/446692241 by downloading databundles on blacbox fuzzer runs. It does so without hurting the performance of non-blackbox batch tasks. Since downloading the default databundle takes ~5 minutes. It also optimizes the unzip by about 50% by using the linux unzip binary instead of Python's slow implementation. --------- Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com> Co-authored-by: Jonathan Metzman --- .../_internal/bot/tasks/update_task.py | 23 ++- .../_internal/bot/tasks/utasks/fuzz_task.py | 10 ++ .../_internal/protos/uworker_msg.proto | 1 + .../_internal/protos/uworker_msg_pb2.py | 140 +++++++++--------- .../_internal/protos/uworker_msg_pb2.pyi | 9 +- 5 files changed, 106 insertions(+), 77 deletions(-) diff --git a/src/clusterfuzz/_internal/bot/tasks/update_task.py b/src/clusterfuzz/_internal/bot/tasks/update_task.py index f778195b5b0..217639537ac 100644 --- a/src/clusterfuzz/_internal/bot/tasks/update_task.py +++ b/src/clusterfuzz/_internal/bot/tasks/update_task.py @@ -16,6 +16,8 @@ import datetime import os import platform +import shutil +import subprocess import sys import time @@ -288,14 +290,15 @@ def update_source_code(): f'(release = {utils.get_clusterfuzz_release()}).') -def update_tests_if_needed(): +def update_tests_if_needed(tests_url=None): """Updates layout tests every day.""" data_directory = environment.get_value('FUZZ_DATA') error_occured = False expected_task_duration = 60 * 60 # 1 hour. retry_limit = environment.get_value('FAIL_RETRIES') temp_archive = os.path.join(data_directory, 'temp.zip') - tests_url = environment.get_value('WEB_TESTS_URL') + if not tests_url: + tests_url = environment.get_value('WEB_TESTS_URL') # Check if we have a valid tests url. if not tests_url: @@ -323,9 +326,19 @@ def update_tests_if_needed(): for _ in range(retry_limit): try: shell.remove_directory(data_directory, recreate=True) - storage.copy_file_from(tests_url, temp_archive) - with archive.open(temp_archive) as reader: - reader.extract_all(data_directory, trusted=True) + if tests_url.startswith('http'): + storage.download_signed_url_to_file(tests_url, temp_archive) + else: + storage.copy_file_from(tests_url, temp_archive) + + if shutil.which('unzip'): + subprocess.run( + ['unzip', '-q', '-o', temp_archive, '-d', data_directory], + check=True, + capture_output=True) + else: + with archive.open(temp_archive) as reader: + reader.extract_all(data_directory, trusted=True) shell.remove_file(temp_archive) error_occured = False break diff --git a/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py b/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py index 13e0da28c23..cbb6538a34b 100644 --- a/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py +++ b/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py @@ -38,6 +38,7 @@ from clusterfuzz._internal.bot.tasks import setup from clusterfuzz._internal.bot.tasks import task_creation from clusterfuzz._internal.bot.tasks import trials +from clusterfuzz._internal.bot.tasks import update_task from clusterfuzz._internal.bot.tasks.utasks import fuzz_task_knobs from clusterfuzz._internal.bot.tasks.utasks import uworker_handle_errors from clusterfuzz._internal.bot.tasks.utasks import uworker_io @@ -2097,6 +2098,10 @@ def _get_fuzz_target(uworker_input): def utask_main(uworker_input): """Runs the given fuzzer for one round.""" + if not engine.get(uworker_input.fuzzer_name): + update_task.update_tests_if_needed( + uworker_input.fuzz_task_input.web_tests_url) + # Sets fuzzing logs context before running the fuzzer. fuzz_target = _get_fuzz_target(uworker_input) with logs.fuzzer_log_context(uworker_input.fuzzer_name, @@ -2191,6 +2196,11 @@ def _utask_preprocess(fuzzer_name, job_type, uworker_env): use_backup=True).serialize()) fuzz_task_input.trials.extend(trials.preprocess_get_db_trials()) + web_tests_url = environment.get_value('WEB_TESTS_URL') + if web_tests_url: + fuzz_task_input.web_tests_url = storage.get_signed_download_url( + web_tests_url) + for _ in range(MAX_CRASHES_UPLOADED): url = fuzz_task_input.crash_upload_urls.add() url.key = blobs.generate_new_blob_name() diff --git a/src/clusterfuzz/_internal/protos/uworker_msg.proto b/src/clusterfuzz/_internal/protos/uworker_msg.proto index a8eb9607507..79fd66f7a0b 100644 --- a/src/clusterfuzz/_internal/protos/uworker_msg.proto +++ b/src/clusterfuzz/_internal/protos/uworker_msg.proto @@ -53,6 +53,7 @@ message FuzzTaskInput { repeated string global_blacklisted_functions = 6; repeated BlobUploadUrl crash_upload_urls = 7; repeated google.protobuf.Any trials = 8; + optional string web_tests_url = 9; } message DataBundleCorpus { diff --git a/src/clusterfuzz/_internal/protos/uworker_msg_pb2.py b/src/clusterfuzz/_internal/protos/uworker_msg_pb2.py index 51a23f2c343..47da4d6bc90 100644 --- a/src/clusterfuzz/_internal/protos/uworker_msg_pb2.py +++ b/src/clusterfuzz/_internal/protos/uworker_msg_pb2.py @@ -30,7 +30,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.clusterfuzz/_internal/protos/uworker_msg.proto\x12\x0buworker_msg\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x85\x03\n\nSetupInput\x12)\n\x06\x66uzzer\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12\x18\n\x0b\x66uzzer_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\"\n\x15\x66uzzer_log_upload_url\x18\x04 \x01(\tH\x02\x88\x01\x01\x12 \n\x13\x66uzzer_download_url\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\"\n\x15testcase_download_url\x18\x06 \x01(\tH\x04\x88\x01\x01\x12$\n\x1cglobal_blacklisted_functions\x18\x07 \x03(\t\x12;\n\x14\x64\x61ta_bundle_corpuses\x18\x08 \x03(\x0b\x32\x1d.uworker_msg.DataBundleCorpusB\t\n\x07_fuzzerB\x0e\n\x0c_fuzzer_nameB\x18\n\x16_fuzzer_log_upload_urlB\x16\n\x14_fuzzer_download_urlB\x18\n\x16_testcase_download_url\")\n\x10\x41nalyzeTaskInput\x12\x15\n\rbad_revisions\x18\x01 \x03(\x03\"P\n\x12SymbolizeTaskInput\x12!\n\x14old_crash_stacktrace\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x17\n\x15_old_crash_stacktrace\"C\n\rBlobUploadUrl\x12\x10\n\x03key\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03url\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_keyB\x06\n\x04_url\"\xdf\x03\n\rFuzzTaskInput\x12\'\n\x1asample_testcase_upload_key\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\'\n\x1asample_testcase_upload_url\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\"\n\x15script_log_upload_url\x18\x03 \x01(\tH\x02\x88\x01\x01\x12.\n\x0b\x66uzz_target\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyH\x03\x88\x01\x01\x12\x32\n\x06\x63orpus\x18\x05 \x01(\x0b\x32\x1d.uworker_msg.FuzzTargetCorpusH\x04\x88\x01\x01\x12$\n\x1cglobal_blacklisted_functions\x18\x06 \x03(\t\x12\x35\n\x11\x63rash_upload_urls\x18\x07 \x03(\x0b\x32\x1a.uworker_msg.BlobUploadUrl\x12$\n\x06trials\x18\x08 \x03(\x0b\x32\x14.google.protobuf.AnyB\x1d\n\x1b_sample_testcase_upload_keyB\x1d\n\x1b_sample_testcase_upload_urlB\x18\n\x16_script_log_upload_urlB\x0e\n\x0c_fuzz_targetB\t\n\x07_corpus\"\x89\x01\n\x10\x44\x61taBundleCorpus\x12.\n\x0b\x64\x61ta_bundle\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12\x14\n\x07gcs_url\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x0b\x63orpus_urls\x18\x03 \x03(\tB\x0e\n\x0c_data_bundleB\n\n\x08_gcs_url\"\x82\x02\n\x10\x46uzzTargetCorpus\x12(\n\x06\x63orpus\x18\x01 \x01(\x0b\x32\x13.uworker_msg.CorpusH\x00\x88\x01\x01\x12\x34\n\x12regressions_corpus\x18\x02 \x01(\x0b\x32\x13.uworker_msg.CorpusH\x01\x88\x01\x01\x12\x13\n\x06\x65ngine\x18\x03 \x01(\tH\x02\x88\x01\x01\x12*\n\x1dproject_qualified_target_name\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\t\n\x07_corpusB\x15\n\x13_regressions_corpusB\t\n\x07_engineB \n\x1e_project_qualified_target_name\"\xa6\x02\n\x06\x43orpus\x12\x38\n\x0b\x63orpus_urls\x18\x01 \x03(\x0b\x32#.uworker_msg.Corpus.CorpusUrlsEntry\x12:\n\x11last_updated_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x14\n\x07gcs_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x0bupload_urls\x18\x04 \x03(\t\x12\x17\n\nbackup_url\x18\x05 \x01(\tH\x02\x88\x01\x01\x1a\x31\n\x0f\x43orpusUrlsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x14\n\x12_last_updated_timeB\n\n\x08_gcs_urlB\r\n\x0b_backup_url\"\x92\x02\n\x11MinimizeTaskInput\x12 \n\x13testcase_upload_url\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1f\n\x12testcase_blob_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12!\n\x14stacktrace_blob_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\"\n\x15stacktrace_upload_url\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x11\n\targuments\x18\x05 \x03(\tB\x16\n\x14_testcase_upload_urlB\x15\n\x13_testcase_blob_nameB\x17\n\x15_stacktrace_blob_nameB\x18\n\x16_stacktrace_upload_url\",\n\x13RegressionTaskInput\x12\x15\n\rbad_revisions\x18\x01 \x03(\x03\"\x81\x02\n\x14ProgressionTaskInput\x12\x1a\n\rcustom_binary\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x15\n\rbad_revisions\x18\x02 \x03(\x03\x12$\n\x17regression_testcase_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tblob_name\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\"\n\x15stacktrace_upload_url\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_custom_binaryB\x1a\n\x18_regression_testcase_urlB\x0c\n\n_blob_nameB\x18\n\x16_stacktrace_upload_url\"\xcb\x01\n\x19\x43rossPollinateFuzzerProto\x12.\n\x0b\x66uzz_target\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12\x1f\n\x12\x62\x61\x63kup_bucket_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1f\n\x12\x63orpus_engine_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x0e\n\x0c_fuzz_targetB\x15\n\x13_backup_bucket_nameB\x15\n\x13_corpus_engine_name\"\xb9\x05\n\x16\x43orpusPruningTaskInput\x12.\n\x0b\x66uzz_target\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12\"\n\x15last_execution_failed\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12G\n\x17\x63ross_pollinate_fuzzers\x18\x03 \x03(\x0b\x32&.uworker_msg.CrossPollinateFuzzerProto\x12\x32\n\x06\x63orpus\x18\x04 \x01(\x0b\x32\x1d.uworker_msg.FuzzTargetCorpusH\x02\x88\x01\x01\x12=\n\x11quarantine_corpus\x18\x05 \x01(\x0b\x32\x1d.uworker_msg.FuzzTargetCorpusH\x03\x88\x01\x01\x12%\n\x18\x63orpus_crashes_blob_name\x18\x06 \x01(\tH\x04\x88\x01\x01\x12&\n\x19\x63orpus_crashes_upload_url\x18\x07 \x01(\tH\x05\x88\x01\x01\x12!\n\x14\x64\x61ted_backup_gcs_url\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\"\n\x15latest_backup_gcs_url\x18\t \x01(\tH\x07\x88\x01\x01\x12$\n\x17\x64\x61ted_backup_signed_url\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_fuzz_targetB\x18\n\x16_last_execution_failedB\t\n\x07_corpusB\x14\n\x12_quarantine_corpusB\x1b\n\x19_corpus_crashes_blob_nameB\x1c\n\x1a_corpus_crashes_upload_urlB\x17\n\x15_dated_backup_gcs_urlB\x18\n\x16_latest_backup_gcs_urlB\x1a\n\x18_dated_backup_signed_url\"\xd3\x0b\n\x05Input\x12+\n\x08testcase\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12;\n\x18testcase_upload_metadata\x18\x02 \x01(\x0b\x32\x14.google.protobuf.AnyH\x01\x88\x01\x01\x12\x18\n\x0btestcase_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x37\n\x0buworker_env\x18\x04 \x03(\x0b\x32\".uworker_msg.Input.UworkerEnvEntry\x12\x15\n\x08job_type\x18\x06 \x01(\tH\x03\x88\x01\x01\x12&\n\x19uworker_output_upload_url\x18\x07 \x01(\tH\x04\x88\x01\x01\x12>\n\x12variant_task_input\x18\x08 \x01(\x0b\x32\x1d.uworker_msg.VariantTaskInputH\x05\x88\x01\x01\x12\x18\n\x0b\x66uzzer_name\x18\t \x01(\tH\x06\x88\x01\x01\x12\x31\n\x0bsetup_input\x18\n \x01(\x0b\x32\x17.uworker_msg.SetupInputH\x07\x88\x01\x01\x12>\n\x12\x61nalyze_task_input\x18\x0b \x01(\x0b\x32\x1d.uworker_msg.AnalyzeTaskInputH\x08\x88\x01\x01\x12K\n\x19\x63orpus_pruning_task_input\x18\x0c \x01(\x0b\x32#.uworker_msg.CorpusPruningTaskInputH\t\x88\x01\x01\x12\x38\n\x0f\x66uzz_task_input\x18\r \x01(\x0b\x32\x1a.uworker_msg.FuzzTaskInputH\n\x88\x01\x01\x12@\n\x13minimize_task_input\x18\x0e \x01(\x0b\x32\x1e.uworker_msg.MinimizeTaskInputH\x0b\x88\x01\x01\x12\x46\n\x16progression_task_input\x18\x0f \x01(\x0b\x32!.uworker_msg.ProgressionTaskInputH\x0c\x88\x01\x01\x12\x44\n\x15regression_task_input\x18\x10 \x01(\x0b\x32 .uworker_msg.RegressionTaskInputH\r\x88\x01\x01\x12\x42\n\x14symbolize_task_input\x18\x11 \x01(\x0b\x32\x1f.uworker_msg.SymbolizeTaskInputH\x0e\x88\x01\x01\x12\x18\n\x0bmodule_name\x18\x12 \x01(\tH\x0f\x88\x01\x01\x12>\n\x15preprocess_start_time\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x10\x88\x01\x01\x12$\n\x1cglobal_blacklisted_functions\x18\x14 \x03(\t\x12.\n\x0b\x66uzz_target\x18\x15 \x01(\x0b\x32\x14.google.protobuf.AnyH\x11\x88\x01\x01\x1a\x31\n\x0fUworkerEnvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0b\n\t_testcaseB\x1b\n\x19_testcase_upload_metadataB\x0e\n\x0c_testcase_idB\x0b\n\t_job_typeB\x1c\n\x1a_uworker_output_upload_urlB\x15\n\x13_variant_task_inputB\x0e\n\x0c_fuzzer_nameB\x0e\n\x0c_setup_inputB\x15\n\x13_analyze_task_inputB\x1c\n\x1a_corpus_pruning_task_inputB\x12\n\x10_fuzz_task_inputB\x16\n\x14_minimize_task_inputB\x19\n\x17_progression_task_inputB\x18\n\x16_regression_task_inputB\x17\n\x15_symbolize_task_inputB\x0e\n\x0c_module_nameB\x18\n\x16_preprocess_start_timeB\x0e\n\x0c_fuzz_target\"H\n\x10VariantTaskInput\x12\x1e\n\x11original_job_type\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x14\n\x12_original_job_type\"\xc7\x02\n\x13SymbolizeTaskOutput\x12\x17\n\ncrash_type\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rcrash_address\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x63rash_stacktrace\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x17\n\nsymbolized\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x1b\n\x0e\x63rash_revision\x18\x06 \x01(\x03H\x05\x88\x01\x01\x12\x16\n\tbuild_url\x18\x07 \x01(\tH\x06\x88\x01\x01\x42\r\n\x0b_crash_typeB\x10\n\x0e_crash_addressB\x0e\n\x0c_crash_stateB\x13\n\x11_crash_stacktraceB\r\n\x0b_symbolizedB\x11\n\x0f_crash_revisionB\x0c\n\n_build_url\"\x93\x06\n\x11\x41nalyzeTaskOutput\x12\x1b\n\x0e\x63rash_revision\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x1a\n\rabsolute_path\x18\x02 \x01(\tH\x01\x88\x01\x01\x12 \n\x13minimized_arguments\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x63rash_stacktrace\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0e\x63rash_info_set\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x16\n\thttp_flag\x18\x06 \x01(\x08H\x05\x88\x01\x01\x12\x17\n\ncrash_type\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x1a\n\rcrash_address\x18\x08 \x01(\tH\x07\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\t \x01(\tH\x08\x88\x01\x01\x12\x1a\n\rsecurity_flag\x18\n \x01(\x08H\t\x88\x01\x01\x12\x1e\n\x11security_severity\x18\x0b \x01(\x05H\n\x88\x01\x01\x12\"\n\x15one_time_crasher_flag\x18\x0c \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\tbuild_key\x18\r \x01(\tH\x0c\x88\x01\x01\x12\x16\n\tbuild_url\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x14\n\x07gn_args\x18\x0f \x01(\tH\x0e\x88\x01\x01\x12\x15\n\x08platform\x18\x10 \x01(\tH\x0f\x88\x01\x01\x12\x18\n\x0bplatform_id\x18\x11 \x01(\tH\x10\x88\x01\x01\x42\x11\n\x0f_crash_revisionB\x10\n\x0e_absolute_pathB\x16\n\x14_minimized_argumentsB\x13\n\x11_crash_stacktraceB\x11\n\x0f_crash_info_setB\x0c\n\n_http_flagB\r\n\x0b_crash_typeB\x10\n\x0e_crash_addressB\x0e\n\x0c_crash_stateB\x10\n\x0e_security_flagB\x14\n\x12_security_severityB\x18\n\x16_one_time_crasher_flagB\x0c\n\n_build_keyB\x0c\n\n_build_urlB\n\n\x08_gn_argsB\x0b\n\t_platformB\x0e\n\x0c_platform_id\"\xd1\x02\n\tCrashInfo\x12\x13\n\x06is_new\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\x05\x63ount\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x17\n\ncrash_type\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rsecurity_flag\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x1a\n\rcrash_address\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1d\n\x10\x63rash_stacktrace\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x16\n\tunit_path\x18\t \x01(\tH\x07\x88\x01\x01\x42\t\n\x07_is_newB\x08\n\x06_countB\r\n\x0b_crash_typeB\x0e\n\x0c_crash_stateB\x10\n\x0e_security_flagB\x10\n\x0e_crash_addressB\x13\n\x11_crash_stacktraceB\x0c\n\n_unit_path\"\xcb\x01\n\x1bStoreFuzzerRunResultsOutput\x12\x1f\n\x12\x66uzzer_return_code\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12&\n\x19generated_testcase_string\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0e\x63onsole_output\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x15\n\x13_fuzzer_return_codeB\x1c\n\x1a_generated_testcase_stringB\x11\n\x0f_console_output\"\xc8\x07\n\rFuzzTaskCrash\x12\x16\n\tfile_path\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\ncrash_time\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12\x18\n\x0breturn_code\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x15\n\rresource_list\x18\x04 \x03(\t\x12\x10\n\x08gestures\x18\x05 \x03(\t\x12\x16\n\targuments\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\x12\x66uzzing_strategies\x18\x07 \x03(\t\x12\x1a\n\rsecurity_flag\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x11should_be_ignored\x18\t \x01(\x08H\x05\x88\x01\x01\x12\x16\n\thttp_flag\x18\n \x01(\x08H\x06\x88\x01\x01\x12%\n\x18\x61pplication_command_line\x18\x0b \x01(\tH\x07\x88\x01\x01\x12*\n\x1dunsymbolized_crash_stacktrace\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x17\n\ncrash_type\x18\r \x01(\tH\t\x88\x01\x01\x12\x1a\n\rcrash_address\x18\x0e \x01(\tH\n\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\x0f \x01(\tH\x0b\x88\x01\x01\x12\x1d\n\x10\x63rash_stacktrace\x18\x10 \x01(\tH\x0c\x88\x01\x01\x12\x18\n\x10\x63rash_categories\x18\x11 \x03(\t\x12\x10\n\x03key\x18\x12 \x01(\tH\r\x88\x01\x01\x12\x15\n\x08is_valid\x18\x14 \x01(\x08H\x0e\x88\x01\x01\x12\x17\n\nfuzzed_key\x18\x15 \x01(\tH\x0f\x88\x01\x01\x12\x1a\n\rabsolute_path\x18\x16 \x01(\tH\x10\x88\x01\x01\x12\x1d\n\x10\x61rchive_filename\x18\x17 \x01(\tH\x11\x88\x01\x01\x12\x15\n\x08\x61rchived\x18\x18 \x01(\x08H\x12\x88\x01\x01\x42\x0c\n\n_file_pathB\r\n\x0b_crash_timeB\x0e\n\x0c_return_codeB\x0c\n\n_argumentsB\x10\n\x0e_security_flagB\x14\n\x12_should_be_ignoredB\x0c\n\n_http_flagB\x1b\n\x19_application_command_lineB \n\x1e_unsymbolized_crash_stacktraceB\r\n\x0b_crash_typeB\x10\n\x0e_crash_addressB\x0e\n\x0c_crash_stateB\x13\n\x11_crash_stacktraceB\x06\n\x04_keyB\x0b\n\t_is_validB\r\n\x0b_fuzzed_keyB\x10\n\x0e_absolute_pathB\x13\n\x11_archive_filenameB\x0b\n\t_archived\"\xf1\x02\n\x0b\x46uzzContext\x12\x14\n\x07redzone\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x1a\n\rdisable_ubsan\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x1c\n\x0fwindow_argument\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1f\n\x12timeout_multiplier\x18\x04 \x01(\x02H\x03\x88\x01\x01\x12\x19\n\x0ctest_timeout\x18\x05 \x01(\x05H\x04\x88\x01\x01\x12\x45\n\x0f\x66uzzer_metadata\x18\x06 \x03(\x0b\x32,.uworker_msg.FuzzContext.FuzzerMetadataEntry\x1a\x35\n\x13\x46uzzerMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\n\n\x08_redzoneB\x10\n\x0e_disable_ubsanB\x12\n\x10_window_argumentB\x15\n\x13_timeout_multiplierB\x0f\n\r_test_timeout\"\xff\x01\n\x12\x46uzzTaskCrashGroup\x12.\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x18.uworker_msg.FuzzContextH\x00\x88\x01\x01\x12+\n\x07\x63rashes\x18\x02 \x03(\x0b\x32\x1a.uworker_msg.FuzzTaskCrash\x12\x33\n\nmain_crash\x18\x03 \x01(\x0b\x32\x1a.uworker_msg.FuzzTaskCrashH\x01\x88\x01\x01\x12\"\n\x15one_time_crasher_flag\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\n\n\x08_contextB\r\n\x0b_main_crashB\x18\n\x16_one_time_crasher_flag\"\xab\x01\n\x0c\x45ngineOutput\x12\x13\n\x06output\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0breturn_code\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12-\n\ttimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\x08testcase\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\t\n\x07_outputB\x0e\n\x0c_return_codeB\x0b\n\t_testcase\"\xb8\x06\n\x0e\x46uzzTaskOutput\x12(\n\x1b\x66ully_qualified_fuzzer_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x63rash_revision\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1e\n\x11job_run_timestamp\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x1f\n\x12testcases_executed\x18\x06 \x01(\x03H\x03\x88\x01\x01\x12I\n\x12\x66uzzer_run_results\x18\x08 \x01(\x0b\x32(.uworker_msg.StoreFuzzerRunResultsOutputH\x04\x88\x01\x01\x12\x1e\n\x11new_targets_count\x18\t \x01(\x05H\x05\x88\x01\x01\x12\x1c\n\x0f\x66uzzer_revision\x18\n \x01(\x05H\x06\x88\x01\x01\x12\x14\n\x0c\x66uzz_targets\x18\x0b \x03(\t\x12\x1a\n\x12testcase_run_jsons\x18\x0c \x03(\t\x12\x35\n\x0c\x63rash_groups\x18\r \x03(\x0b\x32\x1f.uworker_msg.FuzzTaskCrashGroup\x12/\n\nbuild_data\x18\x0e \x01(\x0b\x32\x16.uworker_msg.BuildDataH\x07\x88\x01\x01\x12\x19\n\x0c\x61pp_revision\x18\x0f \x01(\x03H\x08\x88\x01\x01\x12\x31\n\x0e\x65ngine_outputs\x18\x10 \x03(\x0b\x32\x19.uworker_msg.EngineOutput\x12\x16\n\tbuild_key\x18\x11 \x01(\tH\t\x88\x01\x01\x12\x16\n\tbuild_url\x18\x12 \x01(\tH\n\x88\x01\x01\x12\x14\n\x07gn_args\x18\x13 \x01(\tH\x0b\x88\x01\x01\x42\x1e\n\x1c_fully_qualified_fuzzer_nameB\x11\n\x0f_crash_revisionB\x14\n\x12_job_run_timestampB\x15\n\x13_testcases_executedB\x15\n\x13_fuzzer_run_resultsB\x14\n\x12_new_targets_countB\x12\n\x10_fuzzer_revisionB\r\n\x0b_build_dataB\x0f\n\r_app_revisionB\x0c\n\n_build_keyB\x0c\n\n_build_urlB\n\n\x08_gn_args\"\xef\x05\n\x12MinimizeTaskOutput\x12X\n\x16last_crash_result_dict\x18\x01 \x03(\x0b\x32\x38.uworker_msg.MinimizeTaskOutput.LastCrashResultDictEntry\x12\x18\n\x0b\x66laky_stack\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12&\n\x19security_severity_updated\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x1e\n\x11security_severity\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x12minimization_phase\x18\x05 \x01(\x05H\x03\x88\x01\x01\x12\x10\n\x08gestures\x18\x06 \x03(\t\x12\x1b\n\x0eminimized_keys\x18\x07 \x01(\tH\x04\x88\x01\x01\x12 \n\x13minimized_arguments\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x1a\n\rarchive_state\x18\t \x01(\x05H\x06\x88\x01\x01\x12\x1a\n\rabsolute_path\x18\n \x01(\tH\x07\x88\x01\x01\x12S\n\x13memory_tool_options\x18\x0b \x03(\x0b\x32\x36.uworker_msg.MinimizeTaskOutput.MemoryToolOptionsEntry\x1a:\n\x18LastCrashResultDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x38\n\x16MemoryToolOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0e\n\x0c_flaky_stackB\x1c\n\x1a_security_severity_updatedB\x14\n\x12_security_severityB\x15\n\x13_minimization_phaseB\x11\n\x0f_minimized_keysB\x16\n\x14_minimized_argumentsB\x10\n\x0e_archive_stateB\x10\n\x0e_absolute_path\"\xfb\x02\n\x14RegressionTaskOutput\x12#\n\x16regression_range_start\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12!\n\x14regression_range_end\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12 \n\x13last_regression_min\x18\x03 \x01(\x03H\x02\x88\x01\x01\x12 \n\x13last_regression_max\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12/\n\x0f\x62uild_data_list\x18\x05 \x03(\x0b\x32\x16.uworker_msg.BuildData\x12%\n\x18is_testcase_reproducible\x18\x06 \x01(\x08H\x04\x88\x01\x01\x42\x19\n\x17_regression_range_startB\x17\n\x15_regression_range_endB\x16\n\x14_last_regression_minB\x16\n\x14_last_regression_maxB\x1b\n\x19_is_testcase_reproducible\"\xa3\x02\n\x11VariantTaskOutput\x12\x13\n\x06status\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x15\n\x08revision\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x17\n\ncrash_type\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rsecurity_flag\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nis_similar\x18\x06 \x01(\x08H\x05\x88\x01\x01\x12\x15\n\x08platform\x18\x07 \x01(\tH\x06\x88\x01\x01\x42\t\n\x07_statusB\x0b\n\t_revisionB\r\n\x0b_crash_typeB\x0e\n\x0c_crash_stateB\x10\n\x0e_security_flagB\r\n\x0b_is_similarB\x0b\n\t_platform\"\xe7\x01\n\tBuildData\x12\x15\n\x08revision\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x19\n\x0cis_bad_build\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\'\n\x1ashould_ignore_crash_result\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12%\n\x18\x62uild_run_console_output\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\x0b\n\t_revisionB\x0f\n\r_is_bad_buildB\x1d\n\x1b_should_ignore_crash_resultB\x1b\n\x19_build_run_console_output\"\xc8\x04\n\x15ProgressionTaskOutput\x12\x19\n\x0cmin_revision\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x19\n\x0cmax_revision\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x1c\n\x0f\x63rash_on_latest\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12$\n\x17\x63rash_on_latest_message\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0e\x63rash_revision\x18\x05 \x01(\x03H\x04\x88\x01\x01\x12)\n\x1clast_tested_crash_stacktrace\x18\x06 \x01(\tH\x05\x88\x01\x01\x12!\n\x14last_progression_min\x18\x07 \x01(\x03H\x06\x88\x01\x01\x12!\n\x14last_progression_max\x18\x08 \x01(\x03H\x07\x88\x01\x01\x12#\n\x16\x63lear_min_max_metadata\x18\t \x01(\x08H\x08\x88\x01\x01\x12/\n\x0f\x62uild_data_list\x18\x0b \x03(\x0b\x32\x16.uworker_msg.BuildDataB\x0f\n\r_min_revisionB\x0f\n\r_max_revisionB\x12\n\x10_crash_on_latestB\x1a\n\x18_crash_on_latest_messageB\x11\n\x0f_crash_revisionB\x1f\n\x1d_last_tested_crash_stacktraceB\x17\n\x15_last_progression_minB\x17\n\x15_last_progression_maxB\x19\n\x17_clear_min_max_metadata\"\xc6\x03\n\x1a\x43rossPollinationStatistics\x12#\n\x16project_qualified_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07sources\x18\x02 \x01(\tH\x01\x88\x01\x01\x12 \n\x13initial_corpus_size\x18\x03 \x01(\x03H\x02\x88\x01\x01\x12\x18\n\x0b\x63orpus_size\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12\"\n\x15initial_edge_coverage\x18\x05 \x01(\x03H\x04\x88\x01\x01\x12\x1a\n\redge_coverage\x18\x06 \x01(\x03H\x05\x88\x01\x01\x12%\n\x18initial_feature_coverage\x18\x07 \x01(\x03H\x06\x88\x01\x01\x12\x1d\n\x10\x66\x65\x61ture_coverage\x18\x08 \x01(\x03H\x07\x88\x01\x01\x42\x19\n\x17_project_qualified_nameB\n\n\x08_sourcesB\x16\n\x14_initial_corpus_sizeB\x0e\n\x0c_corpus_sizeB\x18\n\x16_initial_edge_coverageB\x10\n\x0e_edge_coverageB\x1b\n\x19_initial_feature_coverageB\x13\n\x11_feature_coverage\"\x97\x04\n\x13\x43overageInformation\x12\x19\n\x0cproject_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x32\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12\x1e\n\x11\x63orpus_size_units\x18\x03 \x01(\x03H\x02\x88\x01\x01\x12\x1e\n\x11\x63orpus_size_bytes\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12\x1c\n\x0f\x63orpus_location\x18\x05 \x01(\tH\x04\x88\x01\x01\x12#\n\x16\x63orpus_backup_location\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\"\n\x15quarantine_size_units\x18\x07 \x01(\x03H\x06\x88\x01\x01\x12\"\n\x15quarantine_size_bytes\x18\x08 \x01(\x03H\x07\x88\x01\x01\x12 \n\x13quarantine_location\x18\t \x01(\tH\x08\x88\x01\x01\x42\x0f\n\r_project_nameB\x0c\n\n_timestampB\x14\n\x12_corpus_size_unitsB\x14\n\x12_corpus_size_bytesB\x12\n\x10_corpus_locationB\x19\n\x17_corpus_backup_locationB\x18\n\x16_quarantine_size_unitsB\x18\n\x16_quarantine_size_bytesB\x16\n\x14_quarantine_location\"\xa5\x03\n\x17\x43orpusPruningTaskOutput\x12M\n\x17\x63ross_pollination_stats\x18\x01 \x01(\x0b\x32\'.uworker_msg.CrossPollinationStatisticsH\x00\x88\x01\x01\x12<\n\rcoverage_info\x18\x02 \x01(\x0b\x32 .uworker_msg.CoverageInformationH\x01\x88\x01\x01\x12\x1f\n\x12\x66uzzer_binary_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x63rash_revision\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12\'\n\x07\x63rashes\x18\x05 \x03(\x0b\x32\x16.uworker_msg.CrashInfo\x12#\n\x16\x63orpus_backup_uploaded\x18\x06 \x01(\x08H\x04\x88\x01\x01\x42\x1a\n\x18_cross_pollination_statsB\x10\n\x0e_coverage_infoB\x15\n\x13_fuzzer_binary_nameB\x11\n\x0f_crash_revisionB\x19\n\x17_corpus_backup_uploaded\"\xc5\t\n\x06Output\x12/\n\nerror_type\x18\x03 \x01(\x0e\x32\x16.uworker_msg.ErrorTypeH\x00\x88\x01\x01\x12.\n\ruworker_input\x18\x04 \x01(\x0b\x32\x12.uworker_msg.InputH\x01\x88\x01\x01\x12\x19\n\x0ctest_timeout\x18\x05 \x01(\x02H\x02\x88\x01\x01\x12\x17\n\ncrash_time\x18\x06 \x01(\x02H\x03\x88\x01\x01\x12$\n\x17\x63rash_stacktrace_output\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08\x62ot_name\x18\x12 \x01(\tH\x05\x88\x01\x01\x12\x18\n\x0bplatform_id\x18\x13 \x01(\tH\x06\x88\x01\x01\x12@\n\x13\x61nalyze_task_output\x18\x08 \x01(\x0b\x32\x1e.uworker_msg.AnalyzeTaskOutputH\x07\x88\x01\x01\x12:\n\x10\x66uzz_task_output\x18\t \x01(\x0b\x32\x1b.uworker_msg.FuzzTaskOutputH\x08\x88\x01\x01\x12\x42\n\x14minimize_task_output\x18\n \x01(\x0b\x32\x1f.uworker_msg.MinimizeTaskOutputH\t\x88\x01\x01\x12\x46\n\x16regression_task_output\x18\x0b \x01(\x0b\x32!.uworker_msg.RegressionTaskOutputH\n\x88\x01\x01\x12H\n\x17progression_task_output\x18\x0c \x01(\x0b\x32\".uworker_msg.ProgressionTaskOutputH\x0b\x88\x01\x01\x12\x44\n\x15symbolize_task_output\x18\r \x01(\x0b\x32 .uworker_msg.SymbolizeTaskOutputH\x0c\x88\x01\x01\x12@\n\x13variant_task_output\x18\x0e \x01(\x0b\x32\x1e.uworker_msg.VariantTaskOutputH\r\x88\x01\x01\x12M\n\x1a\x63orpus_pruning_task_output\x18\x10 \x01(\x0b\x32$.uworker_msg.CorpusPruningTaskOutputH\x0e\x88\x01\x01\x12\x1b\n\x0eissue_metadata\x18\x14 \x01(\tH\x0f\x88\x01\x01\x12\x1a\n\rerror_message\x18\x0f \x01(\tH\x10\x88\x01\x01\x42\r\n\x0b_error_typeB\x10\n\x0e_uworker_inputB\x0f\n\r_test_timeoutB\r\n\x0b_crash_timeB\x1a\n\x18_crash_stacktrace_outputB\x0b\n\t_bot_nameB\x0e\n\x0c_platform_idB\x16\n\x14_analyze_task_outputB\x13\n\x11_fuzz_task_outputB\x17\n\x15_minimize_task_outputB\x19\n\x17_regression_task_outputB\x1a\n\x18_progression_task_outputB\x18\n\x16_symbolize_task_outputB\x16\n\x14_variant_task_outputB\x1d\n\x1b_corpus_pruning_task_outputB\x11\n\x0f_issue_metadataB\x10\n\x0e_error_message*\x95\t\n\tErrorType\x12\x0c\n\x08NO_ERROR\x10\x00\x12\x17\n\x13\x41NALYZE_BUILD_SETUP\x10\x01\x12\x14\n\x10\x41NALYZE_NO_CRASH\x10\x02\x12\x1d\n\x19\x41NALYZE_NO_REVISIONS_LIST\x10\x03\x12\x1d\n\x19\x41NALYZE_NO_REVISION_INDEX\x10\x04\x12\x12\n\x0eTESTCASE_SETUP\x10\x05\x12\r\n\tUNHANDLED\x10\x06\x12\x17\n\x13VARIANT_BUILD_SETUP\x10\x07\x12\x12\n\x0eMINIMIZE_SETUP\x10\x08\x12\x1c\n\x18\x46UZZ_BUILD_SETUP_FAILURE\x10\t\x12\"\n\x1e\x46UZZ_DATA_BUNDLE_SETUP_FAILURE\x10\n\x12\x12\n\x0e\x46UZZ_NO_FUZZER\x10\x0b\x12 \n\x1c\x46UZZ_NO_FUZZ_TARGET_SELECTED\x10\r\x12#\n\x1fPROGRESSION_REVISION_LIST_ERROR\x10\x0e\x12\x1f\n\x1bPROGRESSION_BUILD_NOT_FOUND\x10\x0f\x12\x18\n\x14PROGRESSION_NO_CRASH\x10\x10\x12!\n\x1dPROGRESSION_BAD_STATE_MIN_MAX\x10\x11\x12\x17\n\x13PROGRESSION_TIMEOUT\x10\x12\x12\x19\n\x15PROGRESSION_BAD_BUILD\x10\x13\x12!\n\x1dPROGRESSION_BUILD_SETUP_ERROR\x10\x14\x12\"\n\x1eREGRESSION_REVISION_LIST_ERROR\x10\x15\x12\x1e\n\x1aREGRESSION_BUILD_NOT_FOUND\x10\x16\x12 \n\x1cREGRESSION_BUILD_SETUP_ERROR\x10\x17\x12\x1e\n\x1aREGRESSION_BAD_BUILD_ERROR\x10\x18\x12\x17\n\x13REGRESSION_NO_CRASH\x10\x19\x12\x1c\n\x18REGRESSION_TIMEOUT_ERROR\x10\x1a\x12\x31\n-REGRESSION_LOW_CONFIDENCE_IN_REGRESSION_RANGE\x10\x1b\x12\x1f\n\x1bSYMBOLIZE_BUILD_SETUP_ERROR\x10\x1c\x12!\n\x1dMINIMIZE_UNREPRODUCIBLE_CRASH\x10\x1d\x12\x1c\n\x18MINIMIZE_CRASH_TOO_FLAKY\x10\x1e\x12\x1e\n\x1aMINIMIZE_DEADLINE_EXCEEDED\x10\x1f\x12\x31\n-MINIMIZE_DEADLINE_EXCEEDED_IN_MAIN_FILE_PHASE\x10 \x12)\n%LIBFUZZER_MINIMIZATION_UNREPRODUCIBLE\x10!\x12!\n\x1dLIBFUZZER_MINIMIZATION_FAILED\x10\"\x12&\n\"CORPUS_PRUNING_FUZZER_SETUP_FAILED\x10#\x12\x18\n\x14\x43ORPUS_PRUNING_ERROR\x10$\x12\x12\n\x0e\x46UZZ_BAD_BUILD\x10%\x12\"\n\x1e\x41NALYZE_CLOSE_INVALID_UPLOADED\x10&b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n.clusterfuzz/_internal/protos/uworker_msg.proto\x12\x0buworker_msg\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x85\x03\n\nSetupInput\x12)\n\x06\x66uzzer\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12\x18\n\x0b\x66uzzer_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\"\n\x15\x66uzzer_log_upload_url\x18\x04 \x01(\tH\x02\x88\x01\x01\x12 \n\x13\x66uzzer_download_url\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\"\n\x15testcase_download_url\x18\x06 \x01(\tH\x04\x88\x01\x01\x12$\n\x1cglobal_blacklisted_functions\x18\x07 \x03(\t\x12;\n\x14\x64\x61ta_bundle_corpuses\x18\x08 \x03(\x0b\x32\x1d.uworker_msg.DataBundleCorpusB\t\n\x07_fuzzerB\x0e\n\x0c_fuzzer_nameB\x18\n\x16_fuzzer_log_upload_urlB\x16\n\x14_fuzzer_download_urlB\x18\n\x16_testcase_download_url\")\n\x10\x41nalyzeTaskInput\x12\x15\n\rbad_revisions\x18\x01 \x03(\x03\"P\n\x12SymbolizeTaskInput\x12!\n\x14old_crash_stacktrace\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x17\n\x15_old_crash_stacktrace\"C\n\rBlobUploadUrl\x12\x10\n\x03key\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x03url\x18\x02 \x01(\tH\x01\x88\x01\x01\x42\x06\n\x04_keyB\x06\n\x04_url\"\x8d\x04\n\rFuzzTaskInput\x12\'\n\x1asample_testcase_upload_key\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\'\n\x1asample_testcase_upload_url\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\"\n\x15script_log_upload_url\x18\x03 \x01(\tH\x02\x88\x01\x01\x12.\n\x0b\x66uzz_target\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyH\x03\x88\x01\x01\x12\x32\n\x06\x63orpus\x18\x05 \x01(\x0b\x32\x1d.uworker_msg.FuzzTargetCorpusH\x04\x88\x01\x01\x12$\n\x1cglobal_blacklisted_functions\x18\x06 \x03(\t\x12\x35\n\x11\x63rash_upload_urls\x18\x07 \x03(\x0b\x32\x1a.uworker_msg.BlobUploadUrl\x12$\n\x06trials\x18\x08 \x03(\x0b\x32\x14.google.protobuf.Any\x12\x1a\n\rweb_tests_url\x18\t \x01(\tH\x05\x88\x01\x01\x42\x1d\n\x1b_sample_testcase_upload_keyB\x1d\n\x1b_sample_testcase_upload_urlB\x18\n\x16_script_log_upload_urlB\x0e\n\x0c_fuzz_targetB\t\n\x07_corpusB\x10\n\x0e_web_tests_url\"\x89\x01\n\x10\x44\x61taBundleCorpus\x12.\n\x0b\x64\x61ta_bundle\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12\x14\n\x07gcs_url\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x0b\x63orpus_urls\x18\x03 \x03(\tB\x0e\n\x0c_data_bundleB\n\n\x08_gcs_url\"\x82\x02\n\x10\x46uzzTargetCorpus\x12(\n\x06\x63orpus\x18\x01 \x01(\x0b\x32\x13.uworker_msg.CorpusH\x00\x88\x01\x01\x12\x34\n\x12regressions_corpus\x18\x02 \x01(\x0b\x32\x13.uworker_msg.CorpusH\x01\x88\x01\x01\x12\x13\n\x06\x65ngine\x18\x03 \x01(\tH\x02\x88\x01\x01\x12*\n\x1dproject_qualified_target_name\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\t\n\x07_corpusB\x15\n\x13_regressions_corpusB\t\n\x07_engineB \n\x1e_project_qualified_target_name\"\xa6\x02\n\x06\x43orpus\x12\x38\n\x0b\x63orpus_urls\x18\x01 \x03(\x0b\x32#.uworker_msg.Corpus.CorpusUrlsEntry\x12:\n\x11last_updated_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00\x88\x01\x01\x12\x14\n\x07gcs_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x13\n\x0bupload_urls\x18\x04 \x03(\t\x12\x17\n\nbackup_url\x18\x05 \x01(\tH\x02\x88\x01\x01\x1a\x31\n\x0f\x43orpusUrlsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x14\n\x12_last_updated_timeB\n\n\x08_gcs_urlB\r\n\x0b_backup_url\"\x92\x02\n\x11MinimizeTaskInput\x12 \n\x13testcase_upload_url\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1f\n\x12testcase_blob_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12!\n\x14stacktrace_blob_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\"\n\x15stacktrace_upload_url\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x11\n\targuments\x18\x05 \x03(\tB\x16\n\x14_testcase_upload_urlB\x15\n\x13_testcase_blob_nameB\x17\n\x15_stacktrace_blob_nameB\x18\n\x16_stacktrace_upload_url\",\n\x13RegressionTaskInput\x12\x15\n\rbad_revisions\x18\x01 \x03(\x03\"\x81\x02\n\x14ProgressionTaskInput\x12\x1a\n\rcustom_binary\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x15\n\rbad_revisions\x18\x02 \x03(\x03\x12$\n\x17regression_testcase_url\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tblob_name\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\"\n\x15stacktrace_upload_url\x18\x05 \x01(\tH\x03\x88\x01\x01\x42\x10\n\x0e_custom_binaryB\x1a\n\x18_regression_testcase_urlB\x0c\n\n_blob_nameB\x18\n\x16_stacktrace_upload_url\"\xcb\x01\n\x19\x43rossPollinateFuzzerProto\x12.\n\x0b\x66uzz_target\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12\x1f\n\x12\x62\x61\x63kup_bucket_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1f\n\x12\x63orpus_engine_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x0e\n\x0c_fuzz_targetB\x15\n\x13_backup_bucket_nameB\x15\n\x13_corpus_engine_name\"\xb9\x05\n\x16\x43orpusPruningTaskInput\x12.\n\x0b\x66uzz_target\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12\"\n\x15last_execution_failed\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12G\n\x17\x63ross_pollinate_fuzzers\x18\x03 \x03(\x0b\x32&.uworker_msg.CrossPollinateFuzzerProto\x12\x32\n\x06\x63orpus\x18\x04 \x01(\x0b\x32\x1d.uworker_msg.FuzzTargetCorpusH\x02\x88\x01\x01\x12=\n\x11quarantine_corpus\x18\x05 \x01(\x0b\x32\x1d.uworker_msg.FuzzTargetCorpusH\x03\x88\x01\x01\x12%\n\x18\x63orpus_crashes_blob_name\x18\x06 \x01(\tH\x04\x88\x01\x01\x12&\n\x19\x63orpus_crashes_upload_url\x18\x07 \x01(\tH\x05\x88\x01\x01\x12!\n\x14\x64\x61ted_backup_gcs_url\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\"\n\x15latest_backup_gcs_url\x18\t \x01(\tH\x07\x88\x01\x01\x12$\n\x17\x64\x61ted_backup_signed_url\x18\n \x01(\tH\x08\x88\x01\x01\x42\x0e\n\x0c_fuzz_targetB\x18\n\x16_last_execution_failedB\t\n\x07_corpusB\x14\n\x12_quarantine_corpusB\x1b\n\x19_corpus_crashes_blob_nameB\x1c\n\x1a_corpus_crashes_upload_urlB\x17\n\x15_dated_backup_gcs_urlB\x18\n\x16_latest_backup_gcs_urlB\x1a\n\x18_dated_backup_signed_url\"\xd3\x0b\n\x05Input\x12+\n\x08testcase\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00\x88\x01\x01\x12;\n\x18testcase_upload_metadata\x18\x02 \x01(\x0b\x32\x14.google.protobuf.AnyH\x01\x88\x01\x01\x12\x18\n\x0btestcase_id\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x37\n\x0buworker_env\x18\x04 \x03(\x0b\x32\".uworker_msg.Input.UworkerEnvEntry\x12\x15\n\x08job_type\x18\x06 \x01(\tH\x03\x88\x01\x01\x12&\n\x19uworker_output_upload_url\x18\x07 \x01(\tH\x04\x88\x01\x01\x12>\n\x12variant_task_input\x18\x08 \x01(\x0b\x32\x1d.uworker_msg.VariantTaskInputH\x05\x88\x01\x01\x12\x18\n\x0b\x66uzzer_name\x18\t \x01(\tH\x06\x88\x01\x01\x12\x31\n\x0bsetup_input\x18\n \x01(\x0b\x32\x17.uworker_msg.SetupInputH\x07\x88\x01\x01\x12>\n\x12\x61nalyze_task_input\x18\x0b \x01(\x0b\x32\x1d.uworker_msg.AnalyzeTaskInputH\x08\x88\x01\x01\x12K\n\x19\x63orpus_pruning_task_input\x18\x0c \x01(\x0b\x32#.uworker_msg.CorpusPruningTaskInputH\t\x88\x01\x01\x12\x38\n\x0f\x66uzz_task_input\x18\r \x01(\x0b\x32\x1a.uworker_msg.FuzzTaskInputH\n\x88\x01\x01\x12@\n\x13minimize_task_input\x18\x0e \x01(\x0b\x32\x1e.uworker_msg.MinimizeTaskInputH\x0b\x88\x01\x01\x12\x46\n\x16progression_task_input\x18\x0f \x01(\x0b\x32!.uworker_msg.ProgressionTaskInputH\x0c\x88\x01\x01\x12\x44\n\x15regression_task_input\x18\x10 \x01(\x0b\x32 .uworker_msg.RegressionTaskInputH\r\x88\x01\x01\x12\x42\n\x14symbolize_task_input\x18\x11 \x01(\x0b\x32\x1f.uworker_msg.SymbolizeTaskInputH\x0e\x88\x01\x01\x12\x18\n\x0bmodule_name\x18\x12 \x01(\tH\x0f\x88\x01\x01\x12>\n\x15preprocess_start_time\x18\x13 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x10\x88\x01\x01\x12$\n\x1cglobal_blacklisted_functions\x18\x14 \x03(\t\x12.\n\x0b\x66uzz_target\x18\x15 \x01(\x0b\x32\x14.google.protobuf.AnyH\x11\x88\x01\x01\x1a\x31\n\x0fUworkerEnvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0b\n\t_testcaseB\x1b\n\x19_testcase_upload_metadataB\x0e\n\x0c_testcase_idB\x0b\n\t_job_typeB\x1c\n\x1a_uworker_output_upload_urlB\x15\n\x13_variant_task_inputB\x0e\n\x0c_fuzzer_nameB\x0e\n\x0c_setup_inputB\x15\n\x13_analyze_task_inputB\x1c\n\x1a_corpus_pruning_task_inputB\x12\n\x10_fuzz_task_inputB\x16\n\x14_minimize_task_inputB\x19\n\x17_progression_task_inputB\x18\n\x16_regression_task_inputB\x17\n\x15_symbolize_task_inputB\x0e\n\x0c_module_nameB\x18\n\x16_preprocess_start_timeB\x0e\n\x0c_fuzz_target\"H\n\x10VariantTaskInput\x12\x1e\n\x11original_job_type\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x14\n\x12_original_job_type\"\xc7\x02\n\x13SymbolizeTaskOutput\x12\x17\n\ncrash_type\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1a\n\rcrash_address\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x63rash_stacktrace\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x17\n\nsymbolized\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x1b\n\x0e\x63rash_revision\x18\x06 \x01(\x03H\x05\x88\x01\x01\x12\x16\n\tbuild_url\x18\x07 \x01(\tH\x06\x88\x01\x01\x42\r\n\x0b_crash_typeB\x10\n\x0e_crash_addressB\x0e\n\x0c_crash_stateB\x13\n\x11_crash_stacktraceB\r\n\x0b_symbolizedB\x11\n\x0f_crash_revisionB\x0c\n\n_build_url\"\x93\x06\n\x11\x41nalyzeTaskOutput\x12\x1b\n\x0e\x63rash_revision\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x1a\n\rabsolute_path\x18\x02 \x01(\tH\x01\x88\x01\x01\x12 \n\x13minimized_arguments\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1d\n\x10\x63rash_stacktrace\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0e\x63rash_info_set\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x16\n\thttp_flag\x18\x06 \x01(\x08H\x05\x88\x01\x01\x12\x17\n\ncrash_type\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x1a\n\rcrash_address\x18\x08 \x01(\tH\x07\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\t \x01(\tH\x08\x88\x01\x01\x12\x1a\n\rsecurity_flag\x18\n \x01(\x08H\t\x88\x01\x01\x12\x1e\n\x11security_severity\x18\x0b \x01(\x05H\n\x88\x01\x01\x12\"\n\x15one_time_crasher_flag\x18\x0c \x01(\x08H\x0b\x88\x01\x01\x12\x16\n\tbuild_key\x18\r \x01(\tH\x0c\x88\x01\x01\x12\x16\n\tbuild_url\x18\x0e \x01(\tH\r\x88\x01\x01\x12\x14\n\x07gn_args\x18\x0f \x01(\tH\x0e\x88\x01\x01\x12\x15\n\x08platform\x18\x10 \x01(\tH\x0f\x88\x01\x01\x12\x18\n\x0bplatform_id\x18\x11 \x01(\tH\x10\x88\x01\x01\x42\x11\n\x0f_crash_revisionB\x10\n\x0e_absolute_pathB\x16\n\x14_minimized_argumentsB\x13\n\x11_crash_stacktraceB\x11\n\x0f_crash_info_setB\x0c\n\n_http_flagB\r\n\x0b_crash_typeB\x10\n\x0e_crash_addressB\x0e\n\x0c_crash_stateB\x10\n\x0e_security_flagB\x14\n\x12_security_severityB\x18\n\x16_one_time_crasher_flagB\x0c\n\n_build_keyB\x0c\n\n_build_urlB\n\n\x08_gn_argsB\x0b\n\t_platformB\x0e\n\x0c_platform_id\"\xd1\x02\n\tCrashInfo\x12\x13\n\x06is_new\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12\x12\n\x05\x63ount\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x17\n\ncrash_type\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rsecurity_flag\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x1a\n\rcrash_address\x18\x07 \x01(\tH\x05\x88\x01\x01\x12\x1d\n\x10\x63rash_stacktrace\x18\x08 \x01(\tH\x06\x88\x01\x01\x12\x16\n\tunit_path\x18\t \x01(\tH\x07\x88\x01\x01\x42\t\n\x07_is_newB\x08\n\x06_countB\r\n\x0b_crash_typeB\x0e\n\x0c_crash_stateB\x10\n\x0e_security_flagB\x10\n\x0e_crash_addressB\x13\n\x11_crash_stacktraceB\x0c\n\n_unit_path\"\xcb\x01\n\x1bStoreFuzzerRunResultsOutput\x12\x1f\n\x12\x66uzzer_return_code\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12&\n\x19generated_testcase_string\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1b\n\x0e\x63onsole_output\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x15\n\x13_fuzzer_return_codeB\x1c\n\x1a_generated_testcase_stringB\x11\n\x0f_console_output\"\xc8\x07\n\rFuzzTaskCrash\x12\x16\n\tfile_path\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\ncrash_time\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12\x18\n\x0breturn_code\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x15\n\rresource_list\x18\x04 \x03(\t\x12\x10\n\x08gestures\x18\x05 \x03(\t\x12\x16\n\targuments\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\x12\x66uzzing_strategies\x18\x07 \x03(\t\x12\x1a\n\rsecurity_flag\x18\x08 \x01(\x08H\x04\x88\x01\x01\x12\x1e\n\x11should_be_ignored\x18\t \x01(\x08H\x05\x88\x01\x01\x12\x16\n\thttp_flag\x18\n \x01(\x08H\x06\x88\x01\x01\x12%\n\x18\x61pplication_command_line\x18\x0b \x01(\tH\x07\x88\x01\x01\x12*\n\x1dunsymbolized_crash_stacktrace\x18\x0c \x01(\tH\x08\x88\x01\x01\x12\x17\n\ncrash_type\x18\r \x01(\tH\t\x88\x01\x01\x12\x1a\n\rcrash_address\x18\x0e \x01(\tH\n\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\x0f \x01(\tH\x0b\x88\x01\x01\x12\x1d\n\x10\x63rash_stacktrace\x18\x10 \x01(\tH\x0c\x88\x01\x01\x12\x18\n\x10\x63rash_categories\x18\x11 \x03(\t\x12\x10\n\x03key\x18\x12 \x01(\tH\r\x88\x01\x01\x12\x15\n\x08is_valid\x18\x14 \x01(\x08H\x0e\x88\x01\x01\x12\x17\n\nfuzzed_key\x18\x15 \x01(\tH\x0f\x88\x01\x01\x12\x1a\n\rabsolute_path\x18\x16 \x01(\tH\x10\x88\x01\x01\x12\x1d\n\x10\x61rchive_filename\x18\x17 \x01(\tH\x11\x88\x01\x01\x12\x15\n\x08\x61rchived\x18\x18 \x01(\x08H\x12\x88\x01\x01\x42\x0c\n\n_file_pathB\r\n\x0b_crash_timeB\x0e\n\x0c_return_codeB\x0c\n\n_argumentsB\x10\n\x0e_security_flagB\x14\n\x12_should_be_ignoredB\x0c\n\n_http_flagB\x1b\n\x19_application_command_lineB \n\x1e_unsymbolized_crash_stacktraceB\r\n\x0b_crash_typeB\x10\n\x0e_crash_addressB\x0e\n\x0c_crash_stateB\x13\n\x11_crash_stacktraceB\x06\n\x04_keyB\x0b\n\t_is_validB\r\n\x0b_fuzzed_keyB\x10\n\x0e_absolute_pathB\x13\n\x11_archive_filenameB\x0b\n\t_archived\"\xf1\x02\n\x0b\x46uzzContext\x12\x14\n\x07redzone\x18\x01 \x01(\x05H\x00\x88\x01\x01\x12\x1a\n\rdisable_ubsan\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\x1c\n\x0fwindow_argument\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1f\n\x12timeout_multiplier\x18\x04 \x01(\x02H\x03\x88\x01\x01\x12\x19\n\x0ctest_timeout\x18\x05 \x01(\x05H\x04\x88\x01\x01\x12\x45\n\x0f\x66uzzer_metadata\x18\x06 \x03(\x0b\x32,.uworker_msg.FuzzContext.FuzzerMetadataEntry\x1a\x35\n\x13\x46uzzerMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\n\n\x08_redzoneB\x10\n\x0e_disable_ubsanB\x12\n\x10_window_argumentB\x15\n\x13_timeout_multiplierB\x0f\n\r_test_timeout\"\xff\x01\n\x12\x46uzzTaskCrashGroup\x12.\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x18.uworker_msg.FuzzContextH\x00\x88\x01\x01\x12+\n\x07\x63rashes\x18\x02 \x03(\x0b\x32\x1a.uworker_msg.FuzzTaskCrash\x12\x33\n\nmain_crash\x18\x03 \x01(\x0b\x32\x1a.uworker_msg.FuzzTaskCrashH\x01\x88\x01\x01\x12\"\n\x15one_time_crasher_flag\x18\x04 \x01(\x08H\x02\x88\x01\x01\x42\n\n\x08_contextB\r\n\x0b_main_crashB\x18\n\x16_one_time_crasher_flag\"\xab\x01\n\x0c\x45ngineOutput\x12\x13\n\x06output\x18\x01 \x01(\x0cH\x00\x88\x01\x01\x12\x18\n\x0breturn_code\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12-\n\ttimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\x08testcase\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\t\n\x07_outputB\x0e\n\x0c_return_codeB\x0b\n\t_testcase\"\xb8\x06\n\x0e\x46uzzTaskOutput\x12(\n\x1b\x66ully_qualified_fuzzer_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1b\n\x0e\x63rash_revision\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x1e\n\x11job_run_timestamp\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x1f\n\x12testcases_executed\x18\x06 \x01(\x03H\x03\x88\x01\x01\x12I\n\x12\x66uzzer_run_results\x18\x08 \x01(\x0b\x32(.uworker_msg.StoreFuzzerRunResultsOutputH\x04\x88\x01\x01\x12\x1e\n\x11new_targets_count\x18\t \x01(\x05H\x05\x88\x01\x01\x12\x1c\n\x0f\x66uzzer_revision\x18\n \x01(\x05H\x06\x88\x01\x01\x12\x14\n\x0c\x66uzz_targets\x18\x0b \x03(\t\x12\x1a\n\x12testcase_run_jsons\x18\x0c \x03(\t\x12\x35\n\x0c\x63rash_groups\x18\r \x03(\x0b\x32\x1f.uworker_msg.FuzzTaskCrashGroup\x12/\n\nbuild_data\x18\x0e \x01(\x0b\x32\x16.uworker_msg.BuildDataH\x07\x88\x01\x01\x12\x19\n\x0c\x61pp_revision\x18\x0f \x01(\x03H\x08\x88\x01\x01\x12\x31\n\x0e\x65ngine_outputs\x18\x10 \x03(\x0b\x32\x19.uworker_msg.EngineOutput\x12\x16\n\tbuild_key\x18\x11 \x01(\tH\t\x88\x01\x01\x12\x16\n\tbuild_url\x18\x12 \x01(\tH\n\x88\x01\x01\x12\x14\n\x07gn_args\x18\x13 \x01(\tH\x0b\x88\x01\x01\x42\x1e\n\x1c_fully_qualified_fuzzer_nameB\x11\n\x0f_crash_revisionB\x14\n\x12_job_run_timestampB\x15\n\x13_testcases_executedB\x15\n\x13_fuzzer_run_resultsB\x14\n\x12_new_targets_countB\x12\n\x10_fuzzer_revisionB\r\n\x0b_build_dataB\x0f\n\r_app_revisionB\x0c\n\n_build_keyB\x0c\n\n_build_urlB\n\n\x08_gn_args\"\xef\x05\n\x12MinimizeTaskOutput\x12X\n\x16last_crash_result_dict\x18\x01 \x03(\x0b\x32\x38.uworker_msg.MinimizeTaskOutput.LastCrashResultDictEntry\x12\x18\n\x0b\x66laky_stack\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12&\n\x19security_severity_updated\x18\x03 \x01(\x08H\x01\x88\x01\x01\x12\x1e\n\x11security_severity\x18\x04 \x01(\x05H\x02\x88\x01\x01\x12\x1f\n\x12minimization_phase\x18\x05 \x01(\x05H\x03\x88\x01\x01\x12\x10\n\x08gestures\x18\x06 \x03(\t\x12\x1b\n\x0eminimized_keys\x18\x07 \x01(\tH\x04\x88\x01\x01\x12 \n\x13minimized_arguments\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x1a\n\rarchive_state\x18\t \x01(\x05H\x06\x88\x01\x01\x12\x1a\n\rabsolute_path\x18\n \x01(\tH\x07\x88\x01\x01\x12S\n\x13memory_tool_options\x18\x0b \x03(\x0b\x32\x36.uworker_msg.MinimizeTaskOutput.MemoryToolOptionsEntry\x1a:\n\x18LastCrashResultDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x38\n\x16MemoryToolOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\x0e\n\x0c_flaky_stackB\x1c\n\x1a_security_severity_updatedB\x14\n\x12_security_severityB\x15\n\x13_minimization_phaseB\x11\n\x0f_minimized_keysB\x16\n\x14_minimized_argumentsB\x10\n\x0e_archive_stateB\x10\n\x0e_absolute_path\"\xfb\x02\n\x14RegressionTaskOutput\x12#\n\x16regression_range_start\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12!\n\x14regression_range_end\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12 \n\x13last_regression_min\x18\x03 \x01(\x03H\x02\x88\x01\x01\x12 \n\x13last_regression_max\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12/\n\x0f\x62uild_data_list\x18\x05 \x03(\x0b\x32\x16.uworker_msg.BuildData\x12%\n\x18is_testcase_reproducible\x18\x06 \x01(\x08H\x04\x88\x01\x01\x42\x19\n\x17_regression_range_startB\x17\n\x15_regression_range_endB\x16\n\x14_last_regression_minB\x16\n\x14_last_regression_maxB\x1b\n\x19_is_testcase_reproducible\"\xa3\x02\n\x11VariantTaskOutput\x12\x13\n\x06status\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x15\n\x08revision\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x17\n\ncrash_type\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x18\n\x0b\x63rash_state\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1a\n\rsecurity_flag\x18\x05 \x01(\x08H\x04\x88\x01\x01\x12\x17\n\nis_similar\x18\x06 \x01(\x08H\x05\x88\x01\x01\x12\x15\n\x08platform\x18\x07 \x01(\tH\x06\x88\x01\x01\x42\t\n\x07_statusB\x0b\n\t_revisionB\r\n\x0b_crash_typeB\x0e\n\x0c_crash_stateB\x10\n\x0e_security_flagB\r\n\x0b_is_similarB\x0b\n\t_platform\"\xe7\x01\n\tBuildData\x12\x15\n\x08revision\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x19\n\x0cis_bad_build\x18\x02 \x01(\x08H\x01\x88\x01\x01\x12\'\n\x1ashould_ignore_crash_result\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12%\n\x18\x62uild_run_console_output\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\x0b\n\t_revisionB\x0f\n\r_is_bad_buildB\x1d\n\x1b_should_ignore_crash_resultB\x1b\n\x19_build_run_console_output\"\xc8\x04\n\x15ProgressionTaskOutput\x12\x19\n\x0cmin_revision\x18\x01 \x01(\x03H\x00\x88\x01\x01\x12\x19\n\x0cmax_revision\x18\x02 \x01(\x03H\x01\x88\x01\x01\x12\x1c\n\x0f\x63rash_on_latest\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12$\n\x17\x63rash_on_latest_message\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x1b\n\x0e\x63rash_revision\x18\x05 \x01(\x03H\x04\x88\x01\x01\x12)\n\x1clast_tested_crash_stacktrace\x18\x06 \x01(\tH\x05\x88\x01\x01\x12!\n\x14last_progression_min\x18\x07 \x01(\x03H\x06\x88\x01\x01\x12!\n\x14last_progression_max\x18\x08 \x01(\x03H\x07\x88\x01\x01\x12#\n\x16\x63lear_min_max_metadata\x18\t \x01(\x08H\x08\x88\x01\x01\x12/\n\x0f\x62uild_data_list\x18\x0b \x03(\x0b\x32\x16.uworker_msg.BuildDataB\x0f\n\r_min_revisionB\x0f\n\r_max_revisionB\x12\n\x10_crash_on_latestB\x1a\n\x18_crash_on_latest_messageB\x11\n\x0f_crash_revisionB\x1f\n\x1d_last_tested_crash_stacktraceB\x17\n\x15_last_progression_minB\x17\n\x15_last_progression_maxB\x19\n\x17_clear_min_max_metadata\"\xc6\x03\n\x1a\x43rossPollinationStatistics\x12#\n\x16project_qualified_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x14\n\x07sources\x18\x02 \x01(\tH\x01\x88\x01\x01\x12 \n\x13initial_corpus_size\x18\x03 \x01(\x03H\x02\x88\x01\x01\x12\x18\n\x0b\x63orpus_size\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12\"\n\x15initial_edge_coverage\x18\x05 \x01(\x03H\x04\x88\x01\x01\x12\x1a\n\redge_coverage\x18\x06 \x01(\x03H\x05\x88\x01\x01\x12%\n\x18initial_feature_coverage\x18\x07 \x01(\x03H\x06\x88\x01\x01\x12\x1d\n\x10\x66\x65\x61ture_coverage\x18\x08 \x01(\x03H\x07\x88\x01\x01\x42\x19\n\x17_project_qualified_nameB\n\n\x08_sourcesB\x16\n\x14_initial_corpus_sizeB\x0e\n\x0c_corpus_sizeB\x18\n\x16_initial_edge_coverageB\x10\n\x0e_edge_coverageB\x1b\n\x19_initial_feature_coverageB\x13\n\x11_feature_coverage\"\x97\x04\n\x13\x43overageInformation\x12\x19\n\x0cproject_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x32\n\ttimestamp\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01\x88\x01\x01\x12\x1e\n\x11\x63orpus_size_units\x18\x03 \x01(\x03H\x02\x88\x01\x01\x12\x1e\n\x11\x63orpus_size_bytes\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12\x1c\n\x0f\x63orpus_location\x18\x05 \x01(\tH\x04\x88\x01\x01\x12#\n\x16\x63orpus_backup_location\x18\x06 \x01(\tH\x05\x88\x01\x01\x12\"\n\x15quarantine_size_units\x18\x07 \x01(\x03H\x06\x88\x01\x01\x12\"\n\x15quarantine_size_bytes\x18\x08 \x01(\x03H\x07\x88\x01\x01\x12 \n\x13quarantine_location\x18\t \x01(\tH\x08\x88\x01\x01\x42\x0f\n\r_project_nameB\x0c\n\n_timestampB\x14\n\x12_corpus_size_unitsB\x14\n\x12_corpus_size_bytesB\x12\n\x10_corpus_locationB\x19\n\x17_corpus_backup_locationB\x18\n\x16_quarantine_size_unitsB\x18\n\x16_quarantine_size_bytesB\x16\n\x14_quarantine_location\"\xa5\x03\n\x17\x43orpusPruningTaskOutput\x12M\n\x17\x63ross_pollination_stats\x18\x01 \x01(\x0b\x32\'.uworker_msg.CrossPollinationStatisticsH\x00\x88\x01\x01\x12<\n\rcoverage_info\x18\x02 \x01(\x0b\x32 .uworker_msg.CoverageInformationH\x01\x88\x01\x01\x12\x1f\n\x12\x66uzzer_binary_name\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x1b\n\x0e\x63rash_revision\x18\x04 \x01(\x03H\x03\x88\x01\x01\x12\'\n\x07\x63rashes\x18\x05 \x03(\x0b\x32\x16.uworker_msg.CrashInfo\x12#\n\x16\x63orpus_backup_uploaded\x18\x06 \x01(\x08H\x04\x88\x01\x01\x42\x1a\n\x18_cross_pollination_statsB\x10\n\x0e_coverage_infoB\x15\n\x13_fuzzer_binary_nameB\x11\n\x0f_crash_revisionB\x19\n\x17_corpus_backup_uploaded\"\xc5\t\n\x06Output\x12/\n\nerror_type\x18\x03 \x01(\x0e\x32\x16.uworker_msg.ErrorTypeH\x00\x88\x01\x01\x12.\n\ruworker_input\x18\x04 \x01(\x0b\x32\x12.uworker_msg.InputH\x01\x88\x01\x01\x12\x19\n\x0ctest_timeout\x18\x05 \x01(\x02H\x02\x88\x01\x01\x12\x17\n\ncrash_time\x18\x06 \x01(\x02H\x03\x88\x01\x01\x12$\n\x17\x63rash_stacktrace_output\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x15\n\x08\x62ot_name\x18\x12 \x01(\tH\x05\x88\x01\x01\x12\x18\n\x0bplatform_id\x18\x13 \x01(\tH\x06\x88\x01\x01\x12@\n\x13\x61nalyze_task_output\x18\x08 \x01(\x0b\x32\x1e.uworker_msg.AnalyzeTaskOutputH\x07\x88\x01\x01\x12:\n\x10\x66uzz_task_output\x18\t \x01(\x0b\x32\x1b.uworker_msg.FuzzTaskOutputH\x08\x88\x01\x01\x12\x42\n\x14minimize_task_output\x18\n \x01(\x0b\x32\x1f.uworker_msg.MinimizeTaskOutputH\t\x88\x01\x01\x12\x46\n\x16regression_task_output\x18\x0b \x01(\x0b\x32!.uworker_msg.RegressionTaskOutputH\n\x88\x01\x01\x12H\n\x17progression_task_output\x18\x0c \x01(\x0b\x32\".uworker_msg.ProgressionTaskOutputH\x0b\x88\x01\x01\x12\x44\n\x15symbolize_task_output\x18\r \x01(\x0b\x32 .uworker_msg.SymbolizeTaskOutputH\x0c\x88\x01\x01\x12@\n\x13variant_task_output\x18\x0e \x01(\x0b\x32\x1e.uworker_msg.VariantTaskOutputH\r\x88\x01\x01\x12M\n\x1a\x63orpus_pruning_task_output\x18\x10 \x01(\x0b\x32$.uworker_msg.CorpusPruningTaskOutputH\x0e\x88\x01\x01\x12\x1b\n\x0eissue_metadata\x18\x14 \x01(\tH\x0f\x88\x01\x01\x12\x1a\n\rerror_message\x18\x0f \x01(\tH\x10\x88\x01\x01\x42\r\n\x0b_error_typeB\x10\n\x0e_uworker_inputB\x0f\n\r_test_timeoutB\r\n\x0b_crash_timeB\x1a\n\x18_crash_stacktrace_outputB\x0b\n\t_bot_nameB\x0e\n\x0c_platform_idB\x16\n\x14_analyze_task_outputB\x13\n\x11_fuzz_task_outputB\x17\n\x15_minimize_task_outputB\x19\n\x17_regression_task_outputB\x1a\n\x18_progression_task_outputB\x18\n\x16_symbolize_task_outputB\x16\n\x14_variant_task_outputB\x1d\n\x1b_corpus_pruning_task_outputB\x11\n\x0f_issue_metadataB\x10\n\x0e_error_message*\x95\t\n\tErrorType\x12\x0c\n\x08NO_ERROR\x10\x00\x12\x17\n\x13\x41NALYZE_BUILD_SETUP\x10\x01\x12\x14\n\x10\x41NALYZE_NO_CRASH\x10\x02\x12\x1d\n\x19\x41NALYZE_NO_REVISIONS_LIST\x10\x03\x12\x1d\n\x19\x41NALYZE_NO_REVISION_INDEX\x10\x04\x12\x12\n\x0eTESTCASE_SETUP\x10\x05\x12\r\n\tUNHANDLED\x10\x06\x12\x17\n\x13VARIANT_BUILD_SETUP\x10\x07\x12\x12\n\x0eMINIMIZE_SETUP\x10\x08\x12\x1c\n\x18\x46UZZ_BUILD_SETUP_FAILURE\x10\t\x12\"\n\x1e\x46UZZ_DATA_BUNDLE_SETUP_FAILURE\x10\n\x12\x12\n\x0e\x46UZZ_NO_FUZZER\x10\x0b\x12 \n\x1c\x46UZZ_NO_FUZZ_TARGET_SELECTED\x10\r\x12#\n\x1fPROGRESSION_REVISION_LIST_ERROR\x10\x0e\x12\x1f\n\x1bPROGRESSION_BUILD_NOT_FOUND\x10\x0f\x12\x18\n\x14PROGRESSION_NO_CRASH\x10\x10\x12!\n\x1dPROGRESSION_BAD_STATE_MIN_MAX\x10\x11\x12\x17\n\x13PROGRESSION_TIMEOUT\x10\x12\x12\x19\n\x15PROGRESSION_BAD_BUILD\x10\x13\x12!\n\x1dPROGRESSION_BUILD_SETUP_ERROR\x10\x14\x12\"\n\x1eREGRESSION_REVISION_LIST_ERROR\x10\x15\x12\x1e\n\x1aREGRESSION_BUILD_NOT_FOUND\x10\x16\x12 \n\x1cREGRESSION_BUILD_SETUP_ERROR\x10\x17\x12\x1e\n\x1aREGRESSION_BAD_BUILD_ERROR\x10\x18\x12\x17\n\x13REGRESSION_NO_CRASH\x10\x19\x12\x1c\n\x18REGRESSION_TIMEOUT_ERROR\x10\x1a\x12\x31\n-REGRESSION_LOW_CONFIDENCE_IN_REGRESSION_RANGE\x10\x1b\x12\x1f\n\x1bSYMBOLIZE_BUILD_SETUP_ERROR\x10\x1c\x12!\n\x1dMINIMIZE_UNREPRODUCIBLE_CRASH\x10\x1d\x12\x1c\n\x18MINIMIZE_CRASH_TOO_FLAKY\x10\x1e\x12\x1e\n\x1aMINIMIZE_DEADLINE_EXCEEDED\x10\x1f\x12\x31\n-MINIMIZE_DEADLINE_EXCEEDED_IN_MAIN_FILE_PHASE\x10 \x12)\n%LIBFUZZER_MINIMIZATION_UNREPRODUCIBLE\x10!\x12!\n\x1dLIBFUZZER_MINIMIZATION_FAILED\x10\"\x12&\n\"CORPUS_PRUNING_FUZZER_SETUP_FAILED\x10#\x12\x18\n\x14\x43ORPUS_PRUNING_ERROR\x10$\x12\x12\n\x0e\x46UZZ_BAD_BUILD\x10%\x12\"\n\x1e\x41NALYZE_CLOSE_INVALID_UPLOADED\x10&b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -47,8 +47,8 @@ _globals['_MINIMIZETASKOUTPUT_LASTCRASHRESULTDICTENTRY']._serialized_options = b'8\001' _globals['_MINIMIZETASKOUTPUT_MEMORYTOOLOPTIONSENTRY']._options = None _globals['_MINIMIZETASKOUTPUT_MEMORYTOOLOPTIONSENTRY']._serialized_options = b'8\001' - _globals['_ERRORTYPE']._serialized_start=14109 - _globals['_ERRORTYPE']._serialized_end=15282 + _globals['_ERRORTYPE']._serialized_start=14155 + _globals['_ERRORTYPE']._serialized_end=15328 _globals['_SETUPINPUT']._serialized_start=124 _globals['_SETUPINPUT']._serialized_end=513 _globals['_ANALYZETASKINPUT']._serialized_start=515 @@ -58,71 +58,71 @@ _globals['_BLOBUPLOADURL']._serialized_start=640 _globals['_BLOBUPLOADURL']._serialized_end=707 _globals['_FUZZTASKINPUT']._serialized_start=710 - _globals['_FUZZTASKINPUT']._serialized_end=1189 - _globals['_DATABUNDLECORPUS']._serialized_start=1192 - _globals['_DATABUNDLECORPUS']._serialized_end=1329 - _globals['_FUZZTARGETCORPUS']._serialized_start=1332 - _globals['_FUZZTARGETCORPUS']._serialized_end=1590 - _globals['_CORPUS']._serialized_start=1593 - _globals['_CORPUS']._serialized_end=1887 - _globals['_CORPUS_CORPUSURLSENTRY']._serialized_start=1789 - _globals['_CORPUS_CORPUSURLSENTRY']._serialized_end=1838 - _globals['_MINIMIZETASKINPUT']._serialized_start=1890 - _globals['_MINIMIZETASKINPUT']._serialized_end=2164 - _globals['_REGRESSIONTASKINPUT']._serialized_start=2166 - _globals['_REGRESSIONTASKINPUT']._serialized_end=2210 - _globals['_PROGRESSIONTASKINPUT']._serialized_start=2213 - _globals['_PROGRESSIONTASKINPUT']._serialized_end=2470 - _globals['_CROSSPOLLINATEFUZZERPROTO']._serialized_start=2473 - _globals['_CROSSPOLLINATEFUZZERPROTO']._serialized_end=2676 - _globals['_CORPUSPRUNINGTASKINPUT']._serialized_start=2679 - _globals['_CORPUSPRUNINGTASKINPUT']._serialized_end=3376 - _globals['_INPUT']._serialized_start=3379 - _globals['_INPUT']._serialized_end=4870 - _globals['_INPUT_UWORKERENVENTRY']._serialized_start=4432 - _globals['_INPUT_UWORKERENVENTRY']._serialized_end=4481 - _globals['_VARIANTTASKINPUT']._serialized_start=4872 - _globals['_VARIANTTASKINPUT']._serialized_end=4944 - _globals['_SYMBOLIZETASKOUTPUT']._serialized_start=4947 - _globals['_SYMBOLIZETASKOUTPUT']._serialized_end=5274 - _globals['_ANALYZETASKOUTPUT']._serialized_start=5277 - _globals['_ANALYZETASKOUTPUT']._serialized_end=6064 - _globals['_CRASHINFO']._serialized_start=6067 - _globals['_CRASHINFO']._serialized_end=6404 - _globals['_STOREFUZZERRUNRESULTSOUTPUT']._serialized_start=6407 - _globals['_STOREFUZZERRUNRESULTSOUTPUT']._serialized_end=6610 - _globals['_FUZZTASKCRASH']._serialized_start=6613 - _globals['_FUZZTASKCRASH']._serialized_end=7581 - _globals['_FUZZCONTEXT']._serialized_start=7584 - _globals['_FUZZCONTEXT']._serialized_end=7953 - _globals['_FUZZCONTEXT_FUZZERMETADATAENTRY']._serialized_start=7810 - _globals['_FUZZCONTEXT_FUZZERMETADATAENTRY']._serialized_end=7863 - _globals['_FUZZTASKCRASHGROUP']._serialized_start=7956 - _globals['_FUZZTASKCRASHGROUP']._serialized_end=8211 - _globals['_ENGINEOUTPUT']._serialized_start=8214 - _globals['_ENGINEOUTPUT']._serialized_end=8385 - _globals['_FUZZTASKOUTPUT']._serialized_start=8388 - _globals['_FUZZTASKOUTPUT']._serialized_end=9212 - _globals['_MINIMIZETASKOUTPUT']._serialized_start=9215 - _globals['_MINIMIZETASKOUTPUT']._serialized_end=9966 - _globals['_MINIMIZETASKOUTPUT_LASTCRASHRESULTDICTENTRY']._serialized_start=9680 - _globals['_MINIMIZETASKOUTPUT_LASTCRASHRESULTDICTENTRY']._serialized_end=9738 - _globals['_MINIMIZETASKOUTPUT_MEMORYTOOLOPTIONSENTRY']._serialized_start=9740 - _globals['_MINIMIZETASKOUTPUT_MEMORYTOOLOPTIONSENTRY']._serialized_end=9796 - _globals['_REGRESSIONTASKOUTPUT']._serialized_start=9969 - _globals['_REGRESSIONTASKOUTPUT']._serialized_end=10348 - _globals['_VARIANTTASKOUTPUT']._serialized_start=10351 - _globals['_VARIANTTASKOUTPUT']._serialized_end=10642 - _globals['_BUILDDATA']._serialized_start=10645 - _globals['_BUILDDATA']._serialized_end=10876 - _globals['_PROGRESSIONTASKOUTPUT']._serialized_start=10879 - _globals['_PROGRESSIONTASKOUTPUT']._serialized_end=11463 - _globals['_CROSSPOLLINATIONSTATISTICS']._serialized_start=11466 - _globals['_CROSSPOLLINATIONSTATISTICS']._serialized_end=11920 - _globals['_COVERAGEINFORMATION']._serialized_start=11923 - _globals['_COVERAGEINFORMATION']._serialized_end=12458 - _globals['_CORPUSPRUNINGTASKOUTPUT']._serialized_start=12461 - _globals['_CORPUSPRUNINGTASKOUTPUT']._serialized_end=12882 - _globals['_OUTPUT']._serialized_start=12885 - _globals['_OUTPUT']._serialized_end=14106 + _globals['_FUZZTASKINPUT']._serialized_end=1235 + _globals['_DATABUNDLECORPUS']._serialized_start=1238 + _globals['_DATABUNDLECORPUS']._serialized_end=1375 + _globals['_FUZZTARGETCORPUS']._serialized_start=1378 + _globals['_FUZZTARGETCORPUS']._serialized_end=1636 + _globals['_CORPUS']._serialized_start=1639 + _globals['_CORPUS']._serialized_end=1933 + _globals['_CORPUS_CORPUSURLSENTRY']._serialized_start=1835 + _globals['_CORPUS_CORPUSURLSENTRY']._serialized_end=1884 + _globals['_MINIMIZETASKINPUT']._serialized_start=1936 + _globals['_MINIMIZETASKINPUT']._serialized_end=2210 + _globals['_REGRESSIONTASKINPUT']._serialized_start=2212 + _globals['_REGRESSIONTASKINPUT']._serialized_end=2256 + _globals['_PROGRESSIONTASKINPUT']._serialized_start=2259 + _globals['_PROGRESSIONTASKINPUT']._serialized_end=2516 + _globals['_CROSSPOLLINATEFUZZERPROTO']._serialized_start=2519 + _globals['_CROSSPOLLINATEFUZZERPROTO']._serialized_end=2722 + _globals['_CORPUSPRUNINGTASKINPUT']._serialized_start=2725 + _globals['_CORPUSPRUNINGTASKINPUT']._serialized_end=3422 + _globals['_INPUT']._serialized_start=3425 + _globals['_INPUT']._serialized_end=4916 + _globals['_INPUT_UWORKERENVENTRY']._serialized_start=4478 + _globals['_INPUT_UWORKERENVENTRY']._serialized_end=4527 + _globals['_VARIANTTASKINPUT']._serialized_start=4918 + _globals['_VARIANTTASKINPUT']._serialized_end=4990 + _globals['_SYMBOLIZETASKOUTPUT']._serialized_start=4993 + _globals['_SYMBOLIZETASKOUTPUT']._serialized_end=5320 + _globals['_ANALYZETASKOUTPUT']._serialized_start=5323 + _globals['_ANALYZETASKOUTPUT']._serialized_end=6110 + _globals['_CRASHINFO']._serialized_start=6113 + _globals['_CRASHINFO']._serialized_end=6450 + _globals['_STOREFUZZERRUNRESULTSOUTPUT']._serialized_start=6453 + _globals['_STOREFUZZERRUNRESULTSOUTPUT']._serialized_end=6656 + _globals['_FUZZTASKCRASH']._serialized_start=6659 + _globals['_FUZZTASKCRASH']._serialized_end=7627 + _globals['_FUZZCONTEXT']._serialized_start=7630 + _globals['_FUZZCONTEXT']._serialized_end=7999 + _globals['_FUZZCONTEXT_FUZZERMETADATAENTRY']._serialized_start=7856 + _globals['_FUZZCONTEXT_FUZZERMETADATAENTRY']._serialized_end=7909 + _globals['_FUZZTASKCRASHGROUP']._serialized_start=8002 + _globals['_FUZZTASKCRASHGROUP']._serialized_end=8257 + _globals['_ENGINEOUTPUT']._serialized_start=8260 + _globals['_ENGINEOUTPUT']._serialized_end=8431 + _globals['_FUZZTASKOUTPUT']._serialized_start=8434 + _globals['_FUZZTASKOUTPUT']._serialized_end=9258 + _globals['_MINIMIZETASKOUTPUT']._serialized_start=9261 + _globals['_MINIMIZETASKOUTPUT']._serialized_end=10012 + _globals['_MINIMIZETASKOUTPUT_LASTCRASHRESULTDICTENTRY']._serialized_start=9726 + _globals['_MINIMIZETASKOUTPUT_LASTCRASHRESULTDICTENTRY']._serialized_end=9784 + _globals['_MINIMIZETASKOUTPUT_MEMORYTOOLOPTIONSENTRY']._serialized_start=9786 + _globals['_MINIMIZETASKOUTPUT_MEMORYTOOLOPTIONSENTRY']._serialized_end=9842 + _globals['_REGRESSIONTASKOUTPUT']._serialized_start=10015 + _globals['_REGRESSIONTASKOUTPUT']._serialized_end=10394 + _globals['_VARIANTTASKOUTPUT']._serialized_start=10397 + _globals['_VARIANTTASKOUTPUT']._serialized_end=10688 + _globals['_BUILDDATA']._serialized_start=10691 + _globals['_BUILDDATA']._serialized_end=10922 + _globals['_PROGRESSIONTASKOUTPUT']._serialized_start=10925 + _globals['_PROGRESSIONTASKOUTPUT']._serialized_end=11509 + _globals['_CROSSPOLLINATIONSTATISTICS']._serialized_start=11512 + _globals['_CROSSPOLLINATIONSTATISTICS']._serialized_end=11966 + _globals['_COVERAGEINFORMATION']._serialized_start=11969 + _globals['_COVERAGEINFORMATION']._serialized_end=12504 + _globals['_CORPUSPRUNINGTASKOUTPUT']._serialized_start=12507 + _globals['_CORPUSPRUNINGTASKOUTPUT']._serialized_end=12928 + _globals['_OUTPUT']._serialized_start=12931 + _globals['_OUTPUT']._serialized_end=14152 # @@protoc_insertion_point(module_scope) diff --git a/src/clusterfuzz/_internal/protos/uworker_msg_pb2.pyi b/src/clusterfuzz/_internal/protos/uworker_msg_pb2.pyi index 0d0c15fe956..07edfae017a 100644 --- a/src/clusterfuzz/_internal/protos/uworker_msg_pb2.pyi +++ b/src/clusterfuzz/_internal/protos/uworker_msg_pb2.pyi @@ -251,6 +251,7 @@ class FuzzTaskInput(google.protobuf.message.Message): GLOBAL_BLACKLISTED_FUNCTIONS_FIELD_NUMBER: builtins.int CRASH_UPLOAD_URLS_FIELD_NUMBER: builtins.int TRIALS_FIELD_NUMBER: builtins.int + WEB_TESTS_URL_FIELD_NUMBER: builtins.int sample_testcase_upload_key: builtins.str sample_testcase_upload_url: builtins.str script_log_upload_url: builtins.str @@ -265,6 +266,7 @@ class FuzzTaskInput(google.protobuf.message.Message): def crash_upload_urls(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BlobUploadUrl]: ... @property def trials(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[google.protobuf.any_pb2.Any]: ... + web_tests_url: builtins.str def __init__( self, *, @@ -276,9 +278,10 @@ class FuzzTaskInput(google.protobuf.message.Message): global_blacklisted_functions: collections.abc.Iterable[builtins.str] | None = ..., crash_upload_urls: collections.abc.Iterable[global___BlobUploadUrl] | None = ..., trials: collections.abc.Iterable[google.protobuf.any_pb2.Any] | None = ..., + web_tests_url: builtins.str | None = ..., ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["_corpus", b"_corpus", "_fuzz_target", b"_fuzz_target", "_sample_testcase_upload_key", b"_sample_testcase_upload_key", "_sample_testcase_upload_url", b"_sample_testcase_upload_url", "_script_log_upload_url", b"_script_log_upload_url", "corpus", b"corpus", "fuzz_target", b"fuzz_target", "sample_testcase_upload_key", b"sample_testcase_upload_key", "sample_testcase_upload_url", b"sample_testcase_upload_url", "script_log_upload_url", b"script_log_upload_url"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["_corpus", b"_corpus", "_fuzz_target", b"_fuzz_target", "_sample_testcase_upload_key", b"_sample_testcase_upload_key", "_sample_testcase_upload_url", b"_sample_testcase_upload_url", "_script_log_upload_url", b"_script_log_upload_url", "corpus", b"corpus", "crash_upload_urls", b"crash_upload_urls", "fuzz_target", b"fuzz_target", "global_blacklisted_functions", b"global_blacklisted_functions", "sample_testcase_upload_key", b"sample_testcase_upload_key", "sample_testcase_upload_url", b"sample_testcase_upload_url", "script_log_upload_url", b"script_log_upload_url", "trials", b"trials"]) -> None: ... + def HasField(self, field_name: typing_extensions.Literal["_corpus", b"_corpus", "_fuzz_target", b"_fuzz_target", "_sample_testcase_upload_key", b"_sample_testcase_upload_key", "_sample_testcase_upload_url", b"_sample_testcase_upload_url", "_script_log_upload_url", b"_script_log_upload_url", "_web_tests_url", b"_web_tests_url", "corpus", b"corpus", "fuzz_target", b"fuzz_target", "sample_testcase_upload_key", b"sample_testcase_upload_key", "sample_testcase_upload_url", b"sample_testcase_upload_url", "script_log_upload_url", b"script_log_upload_url", "web_tests_url", b"web_tests_url"]) -> builtins.bool: ... + def ClearField(self, field_name: typing_extensions.Literal["_corpus", b"_corpus", "_fuzz_target", b"_fuzz_target", "_sample_testcase_upload_key", b"_sample_testcase_upload_key", "_sample_testcase_upload_url", b"_sample_testcase_upload_url", "_script_log_upload_url", b"_script_log_upload_url", "_web_tests_url", b"_web_tests_url", "corpus", b"corpus", "crash_upload_urls", b"crash_upload_urls", "fuzz_target", b"fuzz_target", "global_blacklisted_functions", b"global_blacklisted_functions", "sample_testcase_upload_key", b"sample_testcase_upload_key", "sample_testcase_upload_url", b"sample_testcase_upload_url", "script_log_upload_url", b"script_log_upload_url", "trials", b"trials", "web_tests_url", b"web_tests_url"]) -> None: ... @typing.overload def WhichOneof(self, oneof_group: typing_extensions.Literal["_corpus", b"_corpus"]) -> typing_extensions.Literal["corpus"] | None: ... @typing.overload @@ -289,6 +292,8 @@ class FuzzTaskInput(google.protobuf.message.Message): def WhichOneof(self, oneof_group: typing_extensions.Literal["_sample_testcase_upload_url", b"_sample_testcase_upload_url"]) -> typing_extensions.Literal["sample_testcase_upload_url"] | None: ... @typing.overload def WhichOneof(self, oneof_group: typing_extensions.Literal["_script_log_upload_url", b"_script_log_upload_url"]) -> typing_extensions.Literal["script_log_upload_url"] | None: ... + @typing.overload + def WhichOneof(self, oneof_group: typing_extensions.Literal["_web_tests_url", b"_web_tests_url"]) -> typing_extensions.Literal["web_tests_url"] | None: ... global___FuzzTaskInput = FuzzTaskInput From f7aa48113357ecc740314c208a32415814af6e44 Mon Sep 17 00:00:00 2001 From: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com> Date: Tue, 23 Dec 2025 11:56:38 -0500 Subject: [PATCH 4/7] docker: Add luarocks to OSS-Fuzz base images. (#5097) This adds luarocks to the apt-get install list in: - docker/oss-fuzz/base/Dockerfile - docker/oss-fuzz/base/ubuntu-20-04.Dockerfile - docker/oss-fuzz/base/ubuntu-24-04.Dockerfile Unblocks: https://github.com/google/oss-fuzz/pull/13929 --- docker/oss-fuzz/base/Dockerfile | 2 ++ docker/oss-fuzz/base/ubuntu-20-04.Dockerfile | 2 ++ docker/oss-fuzz/base/ubuntu-24-04.Dockerfile | 2 ++ 3 files changed, 6 insertions(+) diff --git a/docker/oss-fuzz/base/Dockerfile b/docker/oss-fuzz/base/Dockerfile index 8402e4d4b11..c55f6f5abca 100644 --- a/docker/oss-fuzz/base/Dockerfile +++ b/docker/oss-fuzz/base/Dockerfile @@ -13,6 +13,8 @@ # limitations under the License. FROM gcr.io/clusterfuzz-images/base +RUN apt-get update && apt-get install -y luarocks + ENV UPDATE_WEB_TESTS False COPY start.sh /data/ diff --git a/docker/oss-fuzz/base/ubuntu-20-04.Dockerfile b/docker/oss-fuzz/base/ubuntu-20-04.Dockerfile index af10ee76230..4b9062a5822 100644 --- a/docker/oss-fuzz/base/ubuntu-20-04.Dockerfile +++ b/docker/oss-fuzz/base/ubuntu-20-04.Dockerfile @@ -13,6 +13,8 @@ # limitations under the License. FROM gcr.io/clusterfuzz-images/base:ubuntu-20-04 +RUN apt-get update && apt-get install -y luarocks + ENV UPDATE_WEB_TESTS False COPY start.sh /data/ diff --git a/docker/oss-fuzz/base/ubuntu-24-04.Dockerfile b/docker/oss-fuzz/base/ubuntu-24-04.Dockerfile index 69880619909..0a4fbd285c2 100644 --- a/docker/oss-fuzz/base/ubuntu-24-04.Dockerfile +++ b/docker/oss-fuzz/base/ubuntu-24-04.Dockerfile @@ -13,6 +13,8 @@ # limitations under the License. FROM gcr.io/clusterfuzz-images/base:ubuntu-24-04 +RUN apt-get update && apt-get install -y luarocks + ENV UPDATE_WEB_TESTS False COPY start.sh /data/ From 11cf7c01d122bd508e036d4dad6b3e13ef8fb159 Mon Sep 17 00:00:00 2001 From: Naga Ayushmaan Betapudi <102908056+AYUSHMAAN-B@users.noreply.github.com> Date: Tue, 23 Dec 2025 23:09:29 +0530 Subject: [PATCH 5/7] Resolve SIGILL errors on Pixel 6 devices caused by a binary mismatch (#5076) Filter fuzzing jobs to ensure Pixel 6 compatibility for Pixel 6 devices. Prevent Pixel 6 devices from falling back to the generic `jobs-android` queue. --- .../_internal/base/tasks/__init__.py | 22 ++++++++----- .../_internal/fuzzing/fuzzer_selection.py | 14 ++++++-- .../_internal/platforms/android/constants.py | 4 +++ .../core/fuzzing/fuzzer_selection_test.py | 33 +++++++++++++++++++ 4 files changed, 62 insertions(+), 11 deletions(-) diff --git a/src/clusterfuzz/_internal/base/tasks/__init__.py b/src/clusterfuzz/_internal/base/tasks/__init__.py index 6b84bb64b68..eac1d204154 100644 --- a/src/clusterfuzz/_internal/base/tasks/__init__.py +++ b/src/clusterfuzz/_internal/base/tasks/__init__.py @@ -34,6 +34,7 @@ from clusterfuzz._internal.google_cloud_utils import pubsub from clusterfuzz._internal.google_cloud_utils import storage from clusterfuzz._internal.metrics import logs +from clusterfuzz._internal.platforms.android import constants from clusterfuzz._internal.system import environment # Task queue prefixes for various job types. @@ -395,14 +396,19 @@ def get_task(): return task if environment.is_android(): - logs.info(f'Could not get task from {regular_queue()}. Trying from' - f'default android queue {default_android_queue()}.') - task = get_regular_task(default_android_queue()) - if task: - # Log the task details for debug purposes. - logs.info(f'Got task with cmd {task.command} args {task.argument} ' - f'job {task.job} from {default_android_queue()} queue.') - return task + if environment.platform() not in \ + constants.DEVICES_WITH_NO_FALLBACK_QUEUE_LIST: + logs.info(f'Could not get task from {regular_queue()}. Trying from' + f'default android queue {default_android_queue()}.') + task = get_regular_task(default_android_queue()) + if task: + logs.info(f'Got task with cmd {task.command} args {task.argument} ' + f'job {task.job} from {default_android_queue()} queue.') + return task + else: + logs.info(f'{environment.platform()} is part of devices with no ' + f'fallback list. Hence skipping picking up tasks from ' + f'default {default_android_queue()} queue.') logs.info(f'Could not get task from {regular_queue()}. Fuzzing.') diff --git a/src/clusterfuzz/_internal/fuzzing/fuzzer_selection.py b/src/clusterfuzz/_internal/fuzzing/fuzzer_selection.py index d5103db05b3..0d3edfec30b 100644 --- a/src/clusterfuzz/_internal/fuzzing/fuzzer_selection.py +++ b/src/clusterfuzz/_internal/fuzzing/fuzzer_selection.py @@ -22,6 +22,7 @@ from clusterfuzz._internal.datastore import fuzz_target_utils from clusterfuzz._internal.datastore import ndb_utils from clusterfuzz._internal.metrics import logs +from clusterfuzz._internal.platforms.android import constants from clusterfuzz._internal.system import environment # Used to prepare targets to be passed to utils.random_weighted_choice. @@ -133,9 +134,16 @@ def get_fuzz_task_payload(platform=None): platforms = [platform] base_platform = platform.split(':')[0] - # Generalized queue for platforms with a base platform (e.g. ANDROID) - if base_platform != platform: - platforms.append(base_platform) + + # Conditionally append the base platform (e.g. ANDROID) as a job filter, + # unless the platform is restricted or is the base platform itself. + if platform != base_platform: + if platform not in constants.DEVICES_WITH_NO_FALLBACK_QUEUE_LIST: + platforms.append(base_platform) + else: + logs.info(f'{platform} is part of devices with no fallback list. ' + f'Hence skipping inclusion of the generic platform ' + f'({base_platform}) while querying.') if environment.is_production(): query = data_types.FuzzerJobs.query() diff --git a/src/clusterfuzz/_internal/platforms/android/constants.py b/src/clusterfuzz/_internal/platforms/android/constants.py index ab600c7e539..a797b3a5a0e 100644 --- a/src/clusterfuzz/_internal/platforms/android/constants.py +++ b/src/clusterfuzz/_internal/platforms/android/constants.py @@ -82,3 +82,7 @@ 'redfin', # Pixel 5 'barbet', # Pixel 5a ] + +# Restrict pixel6 from picking up generic Android jobs to avoid +# Binary Mismatch: Hence, 'ANDROID:PIXEL6' is added to the list. +DEVICES_WITH_NO_FALLBACK_QUEUE_LIST = ['ANDROID:PIXEL6'] diff --git a/src/clusterfuzz/_internal/tests/core/fuzzing/fuzzer_selection_test.py b/src/clusterfuzz/_internal/tests/core/fuzzing/fuzzer_selection_test.py index eaa8bf792ee..4859eb12db6 100644 --- a/src/clusterfuzz/_internal/tests/core/fuzzing/fuzzer_selection_test.py +++ b/src/clusterfuzz/_internal/tests/core/fuzzing/fuzzer_selection_test.py @@ -292,6 +292,39 @@ def test_platform_restriction(self, local_development): argument, job = fuzzer_selection.get_fuzz_task_payload('linux') self.assertEqual(('right_fuzzer_1', 'job_2'), (argument, job)) + android_mapping = data_types.FuzzerJob() + android_mapping.fuzzer = 'android_fuzzer' + android_mapping.job = 'job_android' + android_mapping.platform = 'ANDROID' + android_mapping.put() + + pixel_mapping = data_types.FuzzerJob() + pixel_mapping.fuzzer = 'pixel_fuzzer' + pixel_mapping.job = 'job_pixel6' + pixel_mapping.platform = 'ANDROID:PIXEL6' + pixel_mapping.put() + + data_types.FuzzerJobs( + platform='ANDROID', fuzzer_jobs=[android_mapping]).put() + data_types.FuzzerJobs(platform='ANDROID:PIXEL6', fuzzer_jobs=[]).put() + + # Production Environment + if local_development == 'False': + argument, job = fuzzer_selection.get_fuzz_task_payload('ANDROID') + self.assertEqual(('android_fuzzer', 'job_android'), (argument, job)) + + # PIXEL6 bots must ignore jobs that are not explicitly marked as + # Pixel6-compatible. + argument, job = fuzzer_selection.get_fuzz_task_payload('ANDROID:PIXEL6') + self.assertEqual((None, None), (argument, job)) + # Local Enviroment + else: + argument, job = fuzzer_selection.get_fuzz_task_payload('ANDROID') + self.assertEqual(('android_fuzzer', 'job_android'), (argument, job)) + + argument, job = fuzzer_selection.get_fuzz_task_payload('ANDROID:PIXEL6') + self.assertEqual(('pixel_fuzzer', 'job_pixel6'), (argument, job)) + @test_utils.with_cloud_emulators('datastore') class UpdatePlatformForJobTest(unittest.TestCase): From 700f6c6dbc92db9eb5d4610325f2f857c6a75312 Mon Sep 17 00:00:00 2001 From: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com> Date: Tue, 23 Dec 2025 12:53:38 -0500 Subject: [PATCH 6/7] [NFC] Comment on the luarocks installs in the dockerfiles that it is needed for oss-fuzz (#5098) --- docker/oss-fuzz/base/Dockerfile | 1 + docker/oss-fuzz/base/ubuntu-20-04.Dockerfile | 1 + docker/oss-fuzz/base/ubuntu-24-04.Dockerfile | 1 + 3 files changed, 3 insertions(+) diff --git a/docker/oss-fuzz/base/Dockerfile b/docker/oss-fuzz/base/Dockerfile index c55f6f5abca..1e5f37fab76 100644 --- a/docker/oss-fuzz/base/Dockerfile +++ b/docker/oss-fuzz/base/Dockerfile @@ -13,6 +13,7 @@ # limitations under the License. FROM gcr.io/clusterfuzz-images/base +# luarocks is needed for running lua projects in oss-fuzz. RUN apt-get update && apt-get install -y luarocks ENV UPDATE_WEB_TESTS False diff --git a/docker/oss-fuzz/base/ubuntu-20-04.Dockerfile b/docker/oss-fuzz/base/ubuntu-20-04.Dockerfile index 4b9062a5822..8a6ceb210a4 100644 --- a/docker/oss-fuzz/base/ubuntu-20-04.Dockerfile +++ b/docker/oss-fuzz/base/ubuntu-20-04.Dockerfile @@ -13,6 +13,7 @@ # limitations under the License. FROM gcr.io/clusterfuzz-images/base:ubuntu-20-04 +# luarocks is needed for running lua projects in oss-fuzz. RUN apt-get update && apt-get install -y luarocks ENV UPDATE_WEB_TESTS False diff --git a/docker/oss-fuzz/base/ubuntu-24-04.Dockerfile b/docker/oss-fuzz/base/ubuntu-24-04.Dockerfile index 0a4fbd285c2..9674d49c8ab 100644 --- a/docker/oss-fuzz/base/ubuntu-24-04.Dockerfile +++ b/docker/oss-fuzz/base/ubuntu-24-04.Dockerfile @@ -13,6 +13,7 @@ # limitations under the License. FROM gcr.io/clusterfuzz-images/base:ubuntu-24-04 +# luarocks is needed for running lua projects in oss-fuzz. RUN apt-get update && apt-get install -y luarocks ENV UPDATE_WEB_TESTS False From b5fd5b00100409f9e68da6063e4badb1edd0c97a Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 23 Dec 2025 18:02:17 +0000 Subject: [PATCH 7/7] Fix type annotations (#4791) --- src/clusterfuzz/stacktraces/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clusterfuzz/stacktraces/__init__.py b/src/clusterfuzz/stacktraces/__init__.py index 62cbbce5ea6..4754d540c0d 100644 --- a/src/clusterfuzz/stacktraces/__init__.py +++ b/src/clusterfuzz/stacktraces/__init__.py @@ -178,7 +178,7 @@ def update_state_on_match(self, state_from_group=None, address_filter=lambda s: s, type_filter=lambda s: s, - reset=False) -> re.Match or None: + reset=False) -> re.Match | None: """Update the specified parts of the state if we have a match.""" match = compiled_regex.match(line)