You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adds coverage-guided fuzz tests for bson: each target checks that the C extension and pure-Python implementations agree on arbitrary input, with committed reproducers for known bugs. Runs on every PR plus a daily Evergreen task; no driver source is changed.
Test Plan
just lint, just lint-manual, and just typing pass.
Both Evergreen runner paths verified locally; a deliberately broken target fails as expected.
An Evergreen patch build will confirm real atheris execution (not runnable on local hardware).
Checklist
Checklist for Author
Did you update the changelog (if necessary)? Internal test infrastructure only, no user-facing change.
Is there test coverage? This PR adds the fuzz tests themselves and changes no driver source.
Is any followup work tracked in a JIRA ticket? If so, add link(s). (PYTHON-6169, PYTHON-6178)
Checklist for Reviewer
Does the title of the PR reference a JIRA Ticket?
Do you fully understand the implementation? (Would you be comfortable explaining how this code works to someone else?)
Is all relevant documentation (README or docstring) updated?
Adds atheris-based fuzz targets for bson that run the C extension and
pure-Python implementations on arbitrary input and compare their
results. Known-bug reproducers in fuzz/regression/ run on every PR;
a nightly Evergreen task runs time-boxed discovery fuzzing against a
seed corpus built at setup time from the vendored BSON spec corpus.
No driver source is changed.
The builder only adds canonical_bson bytes, although valid spec cases also include degenerate_bson (for example, test/bson_corpus/array.json:18) and converted_bson (test/bson_corpus/undefined.json:11). Encoding their Extended JSON does not retain these distinct wire representations, so nightly fuzzing misses those cases. Add all available raw BSON variants as separate seeds.
is_valid catches every exception and returns False, so a True result guarantees that decode will not raise any exception, not just InvalidBSON. Swallowing ValueError, struct.error, and the other exceptions here means this target will miss a regression where is_valid() returns True but decode() fails with one of them. Let any exception from decode fail the fuzz case (while retaining the diagnostic).
This issue also appears on line 82 of the same file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PYTHON-4232
Changes in this PR
Adds coverage-guided fuzz tests for
bson: each target checks that the C extension and pure-Python implementations agree on arbitrary input, with committed reproducers for known bugs. Runs on every PR plus a daily Evergreen task; no driver source is changed.Test Plan
just lint,just lint-manual, andjust typingpass.Checklist
Checklist for Author
Checklist for Reviewer