Proto commits in google/clusterfuzz

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:f69c2e6
Author:Ivan Barba
Committer:GitHub

[Swarming] Adds Response proto & discards tasks with missing dimensions (#5289) ## Overview It was request for me to add a log to easily debug when swarming scheduled a task, but i noticed we didnt had the protos for parsing the response, hence i added them. Also this PR handles an edge case in which swarming will not return a task_id if the tasks wasn't scheduled due to swarming related issues(not request, nor pc contract). #### Background This PR comes from a discussion & agreement to a required change from this [PR](https://github.com/google/clusterfuzz/pull/5277) ## Changes - Adds the missing swarming_task_response proto - Ran `protos/generate.sh` which updated a ton of files - The swarming service now marks tasks as not scheduled when no task_id is found, task_id cannot be found if swarming didn't queue the task, because of wrong dimensions or other swarming internal reasons - As the `count_tasks()` api method, now the `push_task()` will also only raise `SwarmingAPIErrors` --------- Co-authored-by: Titouan Rigoudy <titouan@chromium.org>

The documentation is generated from this commit.

Commit:177c531
Author:Paulo Vitor Lima Borges
Committer:GitHub

Rename EngineOutput to FuzzerRunOutput in uworker_msg and fuzz_task (#5310) This PR is related to #5311, which contains the core implementation and full context. Bug: b/487905050 ## Changes Renames the `EngineOutput` protobuf message to `FuzzerRunOutput` and the `engine_outputs` field to `fuzzer_run_outputs`. This generalizes the uworker interface to support deferred logging for both engine-based and blackbox fuzzers. Updates the internal helper functions and variables in `fuzz_task.py` to compile against the new types. This is a syntactic change that only updates the protobuf structure and its references. It does not change any execution or upload logic.

Commit:4bdcc1c
Author:Paulo Borges
Committer:Paulo Borges

[blackbox fuzzer logs] defer the blackbox fuzzer logs to postprocess

Commit:efeb58f
Author:Ivan Barba
Committer:GitHub

Swarming: Add TasksCountRequest and TasksCount to swarming.proto (#5276) As part of the initiative of creating a backpressure logic for the swarming integration we are adding first the required protobuf definitions for a upcoming(in another pr) `/prpc/swarmig.v2.tasks/CountTasks` prpc endpoint. ### Background For more context on the backpressure initative see more info in internal fuzz docs ## Changes - Adds the following protobuf definitions to the `swarming.proto` file: - CountTask message - TasksCountRequest message - StateQuery enum - Updated the reference to the chromium repo in the swarming.proto file - Ran the `src/clusterfuzz/_internal/protos/generate.sh` script, which added a bunch of changes to the generated files. ## Tests No unit tests nor actual tests in the CF code are required for this one, as we are just adding more protobuf definitions not doing nothing new with them(yet),

Commit:4de5a89
Author:Dylan Jew
Committer:GitHub

Add additional JobRun stats for blackbox fuzzers (#5238) This PR aims to improve our ability to benchmark blackbox fuzzers effectiveness and monitor their health. ## Context When measuring fuzzer effectiveness, we’re interested in the rate at which the fuzzer can execute testcases and find bugs. This requires a baseline definition of total fuzzing hours across all types of fuzzers. Some of these stats are already computed for Monarch monitoring in `monitoring_metrics.py`, but we'd like to get them into BigQuery to have a consistent data source for analysis ## Changes Adds `testcases_generated`, `testcase_execution_duration`, `testcase_generation_duration`, and `fuzzing_duration` to the uworker `FuzzTaskOutput` proto and write those stats to the JobRun BigQuery table. ## Notes This only adds metrics for blackbox fuzzers. We will need to aggregate the fuzzing session hours and execution metrics we already store in the TestcaseRun tables for engine guided fuzzers if we want comparisons across fuzzer types. This either means we need to aggregate those tables and write to the JobRun tables, or do the aggregation in our plx workflows/scripts. ## Testing - [x] Ran the server locally, uploaded a fuzzer, and ran a bot locally with additional logs and local bigquery writes enabled. Verified that the stats were added to the `FuzzTaskOutput` proto and written to BigQuery logs from running a local bot: https://paste.googleplex.com/4551083230887936 local BigQuery stats: https://paste.googleplex.com/6697329928306688 - [x] Test on dev and verify the stats are successfully written to the BigQuery tables dev BigQuery json: https://paste.googleplex.com/4627780642930688 dev BigQuery table https://paste.googleplex.com/6251944436957184 Added unit tests for the stats

Commit:bdd9c2b
Author:Dylan Jew
Committer:Dylan Jew

Add total_fuzzing_time_seconds to FuzzTaskOutput

Commit:043b7ad
Author:Javan Lacerda

implement max cpu monitor Signed-off-by: Javan Lacerda <javanlacerda@google.com>

Commit:1eea562
Author:Vinicius da Costa
Committer:GitHub

Copy fuzzer script logs to correct buckets (#5099) Handler for `store_fuzzer_run_results` in postprocess (#3406) was not adding the fuzzer script logs to the correct structured buckets, as expected by the fuzzer page on the UI. This PR tries to fix it by copying the data from the blob store to the expected buckets during postprocess. b/361867455

Commit:854f286
Author:google-labs-jules[bot]
Committer:GitHub

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 <metzman@chromium.org>

Commit:27d7fa1
Author:Jonathan Metzman

tmp

Commit:b4ee8d9
Author:Jonathan Metzman

tmp

Commit:73d44ec
Author:Vinicius da Costa
Committer:GitHub

[Fix] Correctly set testcase build url and gn args for fuzzing on batch (#5013) Fix missing testcase metadata when fuzz task is running on batch (or any non-local execution). #### Context Some build-related environment variables (`build_url`, `build_key` and `gn_args_path`) are set during the build setup on fuzz task main stage. These should be retrieved during postprocess to set the testcase's metadata, which is used to display the build url and the gn args config section on the clusterfuzz UI. However, for non-local execution, these variables are not propagated through the `uworker_output` proto and are missing in postprocess, so any testcase created during fuzzing on batch is not displaying these values. #### Changes * Added the `build_url`, `build_key` and `gn_args` fields to the fuzz task output message. * Added the logic to store these fields and use them to set the initial testcase metadata. #### Tests * Testing on development environment is ineffective as it is not currently running fuzz tasks on batch. I deployed to dev anyway and confirmed that, at least, the local execution of fuzz tasks is still working. * Testing on prod (deployed this PR to internal) * Fuzzing hours stable after deploy: https://screenshot.googleplex.com/7JfregzBR8F6MRA.png * Logs for fuzz tasks executing on batch: https://cloudlogging.app.goo.gl/5xXpLjUdwzK6wTeR9 (main) and https://cloudlogging.app.goo.gl/nX832G1782asdMDXA (postprocess) * Logs for fuzz tasks executing on GCE VMs: https://cloudlogging.app.goo.gl/61nvxR1BwQrQnvXr8 (main) and https://cloudlogging.app.goo.gl/6yoQSvU8r1mUVxsN7 (postprocess) * Evidence of testcases creates after the deploy containing the build url and GN config args: * GCE VMs (local exec): https://clusterfuzz.com/testcase-detail/6746169883426816 * Batch: https://clusterfuzz.com/testcase-detail/6451774202249216 * Build URL: https://screenshot.googleplex.com/45n7M75hEPoEsNZ.png * GN Configs: https://screenshot.googleplex.com/9r3SxRPRQRyC4tv.png Bug: b/441128474 Related issue: https://github.com/google/clusterfuzz/issues/4914

Commit:e95fc4f
Author:Vinicius da Costa

Add build metadata to fuzz task output.

Commit:fbbcb5f
Author:google-labs-jules[bot]

feat: Implement gRPC API for Test Case Reproduction This commit introduces a new gRPC API for asynchronously reproducing test cases in ClusterFuzz. The API is designed to be a robust and scalable standard for exposing ClusterFuzz capabilities. It includes the following features: - **Asynchronous Job Management:** Clients can start reproduction jobs for multiple test cases and receive a job ID for tracking. - **Persistent State:** Job status is persisted using a simple `dbm` database to survive server restarts. - **Real-time Updates & Polling:** Supports both a server-streaming endpoint (`SubscribeToJobUpdates`) for real-time progress and a polling endpoint (`GetJobStatus`). - **Final Metrics:** A dedicated endpoint (`GetJobResults`) calculates and returns final metrics, such as success and failure percentages. - **Secure by Default:** The API is secured using an API key interceptor that reads valid keys from an environment variable (`VALID_API_KEYS`). The implementation is separated into modules for the server, job management, authentication, and integration with the existing `butler` reproduction logic. A new public function was added to the `butler` script to provide a clean API for this integration.

Commit:feb371b
Author:jonathanmetzman
Committer:GitHub

[batch] Support trials. (#4890) The old method requires db access in main, which is no longer allowed. Trials are a feature allowing experimental flags to be used in certain chrome and v8 builds. CC @mi-ac

Commit:514ab3d
Author:Jonathan Metzman

[batch] Support trials.

Commit:61fc24d
Author:Jonathan Metzman

fix

Commit:f2cd734
Author:google-labs-jules[bot]

Refactor trial selection and implement hybrid approach with lists

Commit:7f98def
Author:google-labs-jules[bot]

I've moved the trial selection to the preprocessing step.

Commit:96d813d
Author:jonathanmetzman
Committer:GitHub

Merge OSS-Fuzz branch into master (#4797) This merges the OSS-Fuzz branch into master. The branches diverged when support for fuzzing on batch was added to OSS-Fuzz. Among other things this: Added scheduling of fuzz tasks and made a lot of optimizations to it, in order to deal with challenges filling up our capacity with fuzzing. Optimized things like corpus signing, downloading and pruning as previously these had not been run at OSS-Fuzz scale and levels of diversity. --------- Co-authored-by: Vitor Guidi <vitorguidi@gmail.com> Co-authored-by: Ali HIJAZI <ahijazi@google.com> Co-authored-by: Vinicius da Costa <vtcosta@google.com>

Commit:77a34b5
Author:jonathanmetzman
Committer:Jonathan Metzman

Use corpus backup as base for corpus. (#4721) Use corpus backup as base for corpus when fuzzing. This reduces time to start fuzzing (including signing the URLs in preprocess and downloading the urls in main) from 5 minutes to 20 seconds in tests I did. It should make downloads even faster than they were before the batch migration. TODO: Do this for pruning.

Commit:5d59e5c
Author:jonathanmetzman
Committer:GitHub

Upload crashes to logs bucket in permissionless way (#4400)

Commit:25243d1
Author:jonathanmetzman
Committer:GitHub

Reapply "Make fuzz task work on a uworker. (#4342)" (#4351) (#4352) This reverts commit https://github.com/google/clusterfuzz/commit/90b87101cee2778bf1cb5a90f606f7273d10571c. 1. Don't assume there is a data bundle. 2. Fix typo.

Commit:90b8710
Author:jonathanmetzman
Committer:GitHub

Revert "Make fuzz task work on a uworker. (#4342)" (#4351) This reverts commit 4a752d6e40bdb06ecfe56cc5b94fe9e6f12b9c9c. Causes these errors: https://pantheon.corp.google.com/errors/detail/CIa_hZWh6JKCHA;locations=global;time=P30D?project=google.com:clusterfuzz&utm_source=error-reporting-notification&utm_medium=email&utm_content=new-error&e=-13802955&mods=logs_tg_prod https://pantheon.corp.google.com/errors/detail/CIa_hZWh6JKCHA;locations=global;time=P30D?project=google.com:clusterfuzz&utm_source=error-reporting-notification&utm_medium=email&utm_content=new-error&e=-13802955&mods=logs_tg_prod

Commit:4a752d6
Author:jonathanmetzman
Committer:GitHub

Make fuzz task work on a uworker. (#4342) This has been verified locally. This involved: * Get data bundle directory in an untrusted manner. * Upload fuzzing engine output in an untrusted manner. * Not checking for last corpus sync on a uworker. This is a trusted operation and is uneeded because uworkers do not outlive the task and thus will never have the corpus. * Refactor upload_log so callers aren't exposed to its internals.

Commit:60143b4
Author:jonathanmetzman
Committer:GitHub

Fix permissions issue in analyze uworker_main (#4348) Close testcases in postprocess. Fixes: crbug.com/374738561

Commit:0a8754d
Author:jonathanmetzman
Committer:GitHub

Make sure we serialize objects before putting them in a proto. (#4323) Follow up on: https://github.com/google/clusterfuzz/pull/4316 Fixes: https://pantheon.corp.google.com/errors/detail/CKnhiqX14viPPw;time=PT1H;locations=global?project=google.com:clusterfuzz

Commit:e7d16e6
Author:jonathanmetzman
Committer:GitHub

Harmonize trusted host and normal corpus pruning code. (#4308) Get rid of CorpusCrash. Use CrashInfo everywhere. Using CrashInfo in some places breaks oss-fuzz corpus pruning when there is a crash in the corpus, because we expect to be using the unit_name which CrashInfo doesn't have. It was kind of crazy to have two totally different objects passed to the same function (only similarity is basically ducktyped).

Commit:37653b3
Author:jonathanmetzman
Committer:GitHub

Reland get fuzz target in preprocess and fix simple issue assuming all jobs have fuzz target (#4259)

Commit:6db190c
Author:Jonathan Metzman

Reapply "[fuzz_task] Get fuzz target weights in preprocess (#4192)" (#4258) This reverts commit ab0ebe16e627caeb4692c0aed70b276afe690082.

Commit:ab0ebe1
Author:jonathanmetzman
Committer:GitHub

Revert "[fuzz_task] Get fuzz target weights in preprocess (#4192)" (#4258) This reverts commit b765e4ad88758522350c8e7c451dbc4be5e139e0. Reverting due to exceptions.

Commit:b765e4a
Author:jonathanmetzman
Committer:GitHub

[fuzz_task] Get fuzz target weights in preprocess (#4192)

Commit:316cb7c
Author:jonathanmetzman
Committer:GitHub

Revert "Revert rearch PRs from today. (#4209)" (#4227) This reverts commit 1b8ca0d94266d741bfd1da8eaaba52c40f768f19. This is safe to land because I am around to fix it.

Commit:aa426a9
Author:Ali HIJAZI
Committer:GitHub

Add the possibility to push tasks to swarming (#3996)

Commit:1b8ca0d
Author:jonathanmetzman
Committer:GitHub

Revert rearch PRs from today. (#4209) They should be working, but I be around to fix them.

Commit:069cad0
Author:jonathanmetzman
Committer:GitHub

Fix exception in build_data (#4206)

Commit:aba10fc
Author:jonathanmetzman
Committer:GitHub

[fuzz_task][rearch] Handle bad builds in postprocess (#4201)

Commit:d6ce764
Author:jonathanmetzman
Committer:GitHub

Handle issue metadata properly (#4174) Since it's a heterogenous dictionary, we must store it as a string representation of a json dict (as unwieldy as this is, it's the only correct way to do this). Fixes: https://pantheon.corp.google.com/errors/detail/CODtycKwtN-pGA;filter=%5B%22Type%22%5D;time=P30D;locations=global?e=-13802955&invt=AbZgCw&mods=logs_tg_prod&project=google.com:cluster-fuzz ``` Bar chart Sample stack trace Parsed Raw TypeError: bad argument type for built-in operation at .update ( <frozen _collections_abc>:949 ) at .find_fixed_range ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/progression_task.py:567 ) at .utask_main ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/progression_task.py:671 ) at .uworker_main_no_io ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/__init__.py:211 ) at .execute_locally ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/task_types.py:63 ) at .execute ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/task_types.py:127 ) at .run_command ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py:218 ) at .process_command_impl ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py:429 ) at .wrapper ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py:159 ) at .process_command ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py:248 ) at .task_loop ( /mnt/scratch0/clusterfuzz/src/python/bot/startup/run_bot.py:146 ) ```

Commit:792fa75
Author:jonathanmetzman
Committer:GitHub

Prevent integer overflow by using int64 instead of int32 (#4184) Fixes: ``` ValueError: Value out of range: 2148226322 at ._extract_coverage_information ( /mnt/scratch0/bots/oss-fuzz-linux-zone5-host-qp4x-2/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/corpus_pruning_task.py:978 ) at .utask_main ( /mnt/scratch0/bots/oss-fuzz-linux-zone5-host-qp4x-2/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/corpus_pruning_task.py:1029 ) ```

Commit:f827e6d
Author:jonathanmetzman
Committer:Jonathan Metzman

Ensure archived field is sent to utask_main (#4180) Follow up to https://github.com/google/clusterfuzz/pull/4173 Fixes https://pantheon.corp.google.com/errors/detail/CNDympvhu7XrzwE;locations=global;time=P30D?project=clusterfuzz-external&utm_source=error-reporting-notification&utm_medium=email&utm_content=new-error&e=-13802955&mods=logs_tg_prod

Commit:cf61fa5
Author:jonathanmetzman
Committer:GitHub

Ensure archived field is sent to utask_main (#4180) Follow up to https://github.com/google/clusterfuzz/pull/4173 Fixes https://pantheon.corp.google.com/errors/detail/CNDympvhu7XrzwE;locations=global;time=P30D?project=clusterfuzz-external&utm_source=error-reporting-notification&utm_medium=email&utm_content=new-error&e=-13802955&mods=logs_tg_prod

Commit:774c35c
Author:jonathanmetzman
Committer:Jonathan Metzman

Fix AttributeError: 'NoneType' object has no attribute 'corpus_pruning_task_input' (#4168) This was caused by the roll forward of oss-fuzz.

Commit:7691c8e
Author:jonathanmetzman
Committer:GitHub

Fix AttributeError: 'NoneType' object has no attribute 'corpus_pruning_task_input' (#4168) This was caused by the roll forward of oss-fuzz.

Commit:6a7df45
Author:Oliver Chang
Committer:Oliver Chang

Propagate fuzz_targets for RemoteRegularBuild. (#4166) This is required for OSS-Fuzz after the uworker refactor. This fixes the following exception: ``` Error occurred while working on task. Traceback (most recent call last): File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/python/bot/startup/run_bot.py", line 146, in task_loop commands.process_command(task) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py", line 249, in process_command task.high_end, task.is_command_override) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py", line 159, in wrapper return func(task_name, task_argument, job_name, *args, **kwargs) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py", line 433, in process_command_impl preprocess) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py", line 218, in run_command result = task.execute(task_argument, job_name, uworker_env) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/task_types.py", line 105, in execute self.execute_locally(task_argument, job_type, uworker_env) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/task_types.py", line 63, in execute_locally uworker_output = utasks.uworker_main_no_io(self.module, uworker_input) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/__init__.py", line 211, in uworker_main_no_io uworker_output = utask_module.utask_main(uworker_input) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py", line 1919, in utask_main return session.run() File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py", line 1731, in run self.fuzz_task_output.fuzz_targets.extend(build_setup_result.fuzz_targets) TypeError: Value must be iterable ```

Commit:c7c9a8e
Author:Oliver Chang
Committer:GitHub

Propagate fuzz_targets for RemoteRegularBuild. (#4166) This is required for OSS-Fuzz after the uworker refactor. This fixes the following exception: ``` Error occurred while working on task. Traceback (most recent call last): File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/python/bot/startup/run_bot.py", line 146, in task_loop commands.process_command(task) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py", line 249, in process_command task.high_end, task.is_command_override) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py", line 159, in wrapper return func(task_name, task_argument, job_name, *args, **kwargs) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py", line 433, in process_command_impl preprocess) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/commands.py", line 218, in run_command result = task.execute(task_argument, job_name, uworker_env) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/task_types.py", line 105, in execute self.execute_locally(task_argument, job_type, uworker_env) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/task_types.py", line 63, in execute_locally uworker_output = utasks.uworker_main_no_io(self.module, uworker_input) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/__init__.py", line 211, in uworker_main_no_io uworker_output = utask_module.utask_main(uworker_input) File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py", line 1919, in utask_main return session.run() File "/mnt/scratch0/bots/oss-fuzz-linux-zone1-host-bsw9-13/clusterfuzz/src/clusterfuzz/_internal/bot/tasks/utasks/fuzz_task.py", line 1731, in run self.fuzz_task_output.fuzz_targets.extend(build_setup_result.fuzz_targets) TypeError: Value must be iterable ```

Commit:f0c2459
Author:jonathanmetzman
Committer:GitHub

Remove unused proto field (#4150)

Commit:e9e7476
Author:jonathanmetzman
Committer:GitHub

Reland "Making crashes uworker safe (#4102)" (#4137) This reverts commit 8c2f3bcebd061dfdd40470ee2e2ddab6bf6637e1.

Commit:8c2f3bc
Author:jonathanmetzman
Committer:GitHub

Revert making crashes uworker safe (#4102)

Commit:8c36134
Author:jonathanmetzman
Committer:GitHub

Add back used field (#4101)

Commit:87f69a2
Author:jonathanmetzman
Committer:GitHub

Fix mismatch between Crash and proto version (#4097)

Commit:97758db
Author:jonathanmetzman
Committer:GitHub

Remove unused field (#4096)

Commit:01a76fc
Author:jonathanmetzman
Committer:GitHub

Dont serialize unneeded field (#4092)

Commit:1fa920c
Author:Vitor Guidi

Revert "Make fuzz crashes uworker safe (#4000)" This reverts commit 4a17b2f82cbfcfef979991df635251d9c22ac4b9.

Commit:4a17b2f
Author:jonathanmetzman
Committer:GitHub

Make fuzz crashes uworker safe (#4000) This is probably the most important part of migrating fuzz_task. This superseeds: #3834 and #3816

Commit:d5fb5f6
Author:Vitor Guidi
Committer:GitHub

Attempting to bump proto/grpcio in Python 3.7 - 3rd attempt (#4066) ### Motivation Last attempted was [reverted](https://github.com/google/clusterfuzz/pull/4064) due to an issue in utask main scheduler, related to protos and gcp batch This PR attempts to fix the following issue: ``` AttributeError: Unknown field for InstancePolicy: boot_disk at .__setattr__ ( /mnt/scratch0/clusterfuzz/src/third_party/proto/message.py:932 ) at ._get_allocation_policy ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/google_cloud_utils/batch.py:182 ) at ._create_job ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/google_cloud_utils/batch.py:225 ) at .create_uworker_main_batch_jobs ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/google_cloud_utils/batch.py:139 ) at .schedule_utask_mains ( /mnt/scratch0/clusterfuzz/src/python/bot/startup/run_bot.py:105 ) at .task_loop ( /mnt/scratch0/clusterfuzz/src/python/bot/startup/run_bot.py:136 ) ``` ### Testing strategy This issue was caused because batch was set to 0.2.0, and the boot_disk proto field was only [introduced in 0.6.0](https://cloud.google.com/python/docs/reference/batch/latest/changelog). Returning the dependency to 0.11.0 solved the issue. This was tested manually through [use_batch.py](https://github.com/google/clusterfuzz/blob/bcae6b19f399a74ca105404284a2cad8e174627e/src/clusterfuzz/_internal/tests/core/google_cloud_utils/use_batch.py#L4), pointing to our internal gcp service. Evidence that a batch job is successfully created: ![image](https://github.com/google/clusterfuzz/assets/5733577/85b8c476-e1c0-4e89-b5ce-3c2d0d1cc578) ![image](https://github.com/google/clusterfuzz/assets/5733577/39469891-0a5c-4d66-ae81-c12240a08c6f)

Commit:bcae6b1
Author:jonathanmetzman
Committer:GitHub

Revert "Chore/py37 proto bump reattempt (#4062)" (#4064) This reverts commit 7e57e8821d35ec2b12c957239ae75c9bf33964f7. New error: ``` AttributeError: Unknown field for InstancePolicy: boot_disk at .__setattr__ ( /mnt/scratch0/clusterfuzz/src/third_party/proto/message.py:932 ) at ._get_allocation_policy ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/google_cloud_utils/batch.py:182 ) at ._create_job ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/google_cloud_utils/batch.py:225 ) at .create_uworker_main_batch_jobs ( /mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/google_cloud_utils/batch.py:139 ) at .schedule_utask_mains ( /mnt/scratch0/clusterfuzz/src/python/bot/startup/run_bot.py:105 ) at .task_loop ( /mnt/scratch0/clusterfuzz/src/python/bot/startup/run_bot.py:136 ) ```

Commit:7e57e88
Author:Vitor Guidi
Committer:GitHub

Chore/py37 proto bump reattempt (#4062) Reattempt at #4029 This PR belongs to [this initiative](https://github.com/google/clusterfuzz/issues/4059)

Commit:62090e4
Author:jonathanmetzman
Committer:GitHub

Revert changes to upgrade packages. (#4061) They are broken in prod causing this error: https://pantheon.corp.google.com/errors/detail/CPv0x-n-iqv-jQE?e=-13802955&mods=logs_tg_prod&project=google.com:clusterfuzz ``` Unable to update heartbeat. Traceback (most recent call last): File "/mnt/scratch0/clusterfuzz/src/clusterfuzz/_internal/datastore/data_handler.py", line 1130, in update_heartbeat heartbeat = ndb.Key(data_types.Heartbeat, bot_name).get() File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/_options.py", line 102, in wrapper return wrapped(*pass_args, **kwargs) File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/utils.py", line 150, in positional_wrapper return wrapped(*args, **kwds) File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/key.py", line 859, in get return self.get_async(_options=_options).result() File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/tasklets.py", line 210, in result self.check_success() File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/tasklets.py", line 157, in check_success raise self._exception File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/tasklets.py", line 319, in _advance_tasklet yielded = self.generator.throw(type(error), error, traceback) File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/key.py", line 944, in get entity_pb = yield _datastore_api.lookup(self._key, _options) File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/tasklets.py", line 323, in _advance_tasklet yielded = self.generator.send(send_value) File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/_datastore_api.py", line 165, in lookup entity_pb = yield batch.add(key) File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/ndb/_datastore_api.py", line 217, in add todo_key = key.to_protobuf()._pb.SerializeToString() File "/mnt/scratch0/clusterfuzz/src/third_party/google/cloud/datastore/key.py", line 324, in to_protobuf key.path.append(element) TypeError: Parameter to MergeFrom() must be instance of same class: expected google.datastore.v1.Key.PathElement got PathElement. ``` Vitor says this isn't a deterministic bug.

Commit:a16f837
Author:Vitor Guidi
Committer:GitHub

Chore/bump py37 deps (#4029) *** Motivation This PR complements #4005 by bumping the gcp clients, grpcio and protobuf, and fixing the code to accomodate for breaking changes.

Commit:e530a29
Author:Vitor Guidi

Dropping entity proto headers for protobuf.Any, recompiling

Commit:b9cf5e5
Author:jonathanmetzman
Committer:GitHub

Make crash_revision an int64 (#3990) Fixes: https://pantheon.corp.google.com/errors/detail/CPquw-3h_ueTvQE;service=;version=?project=google.com:cluster-fuzz

Commit:180453c
Author:Ali HIJAZI
Committer:GitHub

Store the backup corpus using a signed url (#3946)

Commit:d7f54e3
Author:Ali HIJAZI
Committer:GitHub

Migrate corpus pruning [3/N] (#3905) Move `process_corpus_crashes` to postprocess: 1- From `utask_main`: Pack the crash.unit_path into a zip file and upload using a signed url 2- From `utask_postprocess`: get the zip, unpack individual files and upload necessary ones to blob storage, store the blob key in the created Testcase's `fuzzed_keys` attribute.

Commit:88c8c3a
Author:Jonathan Metzman

Fix

Commit:4307ddb
Author:jonathanmetzman
Committer:GitHub

Handle fuzz target metadata correctly and in an untrusted manner. (#3894) Previously analyze task was not retrieving the fuzz target metadata properly (this needs the build, analyze was doing it in postprocess) and progression was doing it in an unprivileged way (using the db in utask_main). Change this so we can retrieve the metadata in utask_main and save it in postprocess. Leave a TODO in corpus_pruning which isn't migrated yet.

Commit:25bf084
Author:jonathanmetzman
Committer:GitHub

Move privileged operation in minimize to preprocess. (#3896) Move argument retreival to preprocess. Related: #3008 Fixes: #3888

Commit:07c559b
Author:Jonathan Metzman

Set data bundles properly in preprocess.

Commit:8fb0877
Author:jonathanmetzman
Committer:GitHub

Reland 00c0b532ef5a2ccd4b390304db11cb62414b378d (#3870) Most of the failures were either unrelated or temporary due to change in proto and updated clients not using the new proto.

Commit:00c0b53
Author:jonathanmetzman
Committer:GitHub

Revert "Make data bundles uworker safe (#3868) Causing exceptions.

Commit:a46bc97
Author:jonathanmetzman
Committer:GitHub

Make data bundles uworker safe (#3862)

Commit:e6e1462
Author:jonathanmetzman
Committer:GitHub

Make test_for_crash_with_retries uworker_safe (#3865)

Commit:a7f2ce6
Author:jonathanmetzman
Committer:GitHub

Make test_for_reproducibility uworker safe. (#3864) All tasks that take a testcase as an argument use this function.

Commit:bc8305a
Author:jonathanmetzman
Committer:GitHub

[rearchitecture] Upload more stats in postprocess (#3829)

Commit:cc81ff2
Author:jonathanmetzman
Committer:GitHub

Make LSAN blacklist uworker safe (#3844)

Commit:843bd2c
Author:Oliver Chang
Committer:Oliver Chang

fuzz_task: Migrate crashes to uworker. - Add proto definitions for crash groups. - Have uworkers return serialized CrashGroups, with the input testcases uploaded via signed URLs. - Handle checking if crash is new, testcase creation etc in postprocess. - Remove old uworker_msg.CrashInfo conversion and move the job_run crash group computation to postprocess, as it relies on querying the Datastore to know if the crash is new or not. - Also handle uploading file handles in storage.upload_signed_url - Add bot_name, platform_id to uworker output. TODO: tests.

Commit:6768056
Author:Jonathan Metzman

fix

Commit:b89d9fc
Author:jonathanmetzman
Committer:GitHub

Dont make proto backwards incompatible. (#3806)

Commit:d56f8d7
Author:Ali HIJAZI
Committer:GitHub

Migrate corpus pruning [2/N] (#3763)

Commit:7dac253
Author:Jonathan Metzman

Revert "Use signed URLs for corpus (#3651)" This reverts commit d65125cd0e15c9786e0c2421eff8880a8a777395.

Commit:77bbf11
Author:jonathanmetzman
Committer:GitHub

Improve logging so we can see tasks postprocess and execute (#3774)

Commit:ac362af
Author:jonathanmetzman
Committer:GitHub

Do fuzzer selection in preprocess (#3760) Handle fuzzer selection in a way that is compatible with the fact that corpus access doesn't happen during uworker_main. This means we will not be able to record fuzz targets during main or access the corpus then, so fuzzer selection must happen first.

Commit:774e37d
Author:Ali HIJAZI
Committer:GitHub

[Minimize] Use signed urls within utask_main and cleanup unused blobs in (#3766) postprocess. --------- Co-authored-by: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com>

Commit:d65125c
Author:jonathanmetzman
Committer:GitHub

Use signed URLs for corpus (#3651)

Commit:ea4fcce
Author:Ali HIJAZI
Committer:GitHub

[Progression] call filter_stacktrace with a signed_url within utask_main (#3730)

Commit:7edf640
Author:Ali HIJAZI
Committer:GitHub

[Minimize] upload testcase using signed url (#3701)

Commit:76d1367
Author:Ali HIJAZI
Committer:GitHub

Migrate corpus pruning 2 (#3675) Co-authored-by: jonathanmetzman <31354670+jonathanmetzman@users.noreply.github.com>

Commit:7c8b676
Author:Jonathan Metzman

merge

Commit:048c2e6
Author:Ali HIJAZI
Committer:GitHub

[Progression] Store testcase for regression testing using a signed url. (#3695) The testcase is now stored under a randomly generated filename instead of the testcase file hash of contents.

Commit:ecd05ef
Author:Ali Hijazi

Migrate corpus pruning 2

Commit:396eec0
Author:jonathanmetzman
Committer:GitHub

[rearchitecture] Record how long utasks take (#3679) Record how long utasks take in two ways: 1. From start to finish 2. How long each part takes. So we can figure out why batch seems to fall behind the queue-based system.

Commit:88108ae
Author:Ali HIJAZI
Committer:GitHub

Migrate corpus pruning task [1/N] (#3670)

Commit:d113591
Author:Ali HIJAZI
Committer:GitHub

Migrate regression task. (#3652)

Commit:d9bf6c8
Author:Jonathan Metzman

Update to python3.11

Commit:fc4150e
Author:jonathanmetzman
Committer:GitHub

Handle trusted parts of store_fuzzer_run_results in pre/postprocess (#3406)

Commit:ef9321c
Author:Ali HIJAZI
Committer:GitHub

Migrate Minimize task (#3600)

Commit:f58d65a
Author:Ali HIJAZI
Committer:GitHub

[Progression] Move update_build_metadata to postprocess (#3595)

Commit:e890da7
Author:jonathanmetzman
Committer:GitHub

Revert "[Progression] Move update_build_metadata to postprocess (#3463)" (#3593) This reverts commit d6742919725dd09c6f11e2ae9b2d874412418de8.

Commit:d674291
Author:Ali HIJAZI
Committer:GitHub

[Progression] Move update_build_metadata to postprocess (#3463)

Commit:69b3c3c
Author:Ali HIJAZI
Committer:GitHub

[Symbolize] Move get_stacktrace to preprocess (#3556)

Commit:ab4dbb6
Author:Ali HIJAZI
Committer:GitHub

Use protos directly in utasks (#3536) This change removes the uworker_io wrappers and uses protos directly within the utasks. This change also removes the Json user defined proto.