-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Provide consistent exit codes #617
Conversation
49e9448
to
5ac96ab
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for this awesome PR! It makes a large chunk of our native code much clearer.
5ac96ab
to
8405db8
Compare
eb03e17
to
2df64ca
Compare
I incorporated the latest signal handling changes into this PR. It seems that handling This leaves Jazzer.js with consistent error messages, except for timeouts, where libFuzzer kills the process with a timeout crash and exit code To test the correct debug information handling on SIGINTs I had to provide the |
2df64ca
to
4a9a4c7
Compare
73f98c6
to
075a244
Compare
Errors from within other environments, like vm, window or frame, have different prototypes and would not match instanceof checks.
This change uses the possibility to stop the fuzzer loop provided in the patched libFuzzer version. Incorporating this allows the removal of the stopFuzzing functions and general simplifications of the fuzzing process. The core fuzzing function now returns the expected exit code and found error so that the invoking code can handle them according to its needs, e.g. exit the process with the given code in case of CLI, and rethrow the error in case of Jest.
Handling of SIGSEGV in the native addon only seems to be sufficient. In case of a segfault print an error message, dump the current input and exit the application. This should be a real rare case to begin with and continuing to fuzz seems like a bad idea. SIGINT still needs to be handled in JS, as the fuzzer should shut down properly and generate coverage and debug information.
075a244
to
3822afe
Compare
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@jazzer.js/core](https://togithub.com/CodeIntelligenceTesting/jazzer.js) | [`2.0.0` -> `2.1.0`](https://renovatebot.com/diffs/npm/@jazzer.js%2fcore/2.0.0/2.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@jazzer.js%2fcore/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@jazzer.js%2fcore/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@jazzer.js%2fcore/2.0.0/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@jazzer.js%2fcore/2.0.0/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>CodeIntelligenceTesting/jazzer.js (@​jazzer.js/core)</summary> ### [`v2.1.0`](https://togithub.com/CodeIntelligenceTesting/jazzer.js/releases/tag/v2.1.0): Release 2.1.0 [Compare Source](https://togithub.com/CodeIntelligenceTesting/jazzer.js/compare/v2.0.0...v2.1.0) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed - **Feature**: Jest support: List fuzz test names by [@​zgtm](https://togithub.com/zgtm) in [CodeIntelligenceTesting/jazzer.js#606 - **Feature**: Handle real segfaults in fuzz targets by [@​br-lewis](https://togithub.com/br-lewis) in [CodeIntelligenceTesting/jazzer.js#602 - **Feature**: Provide consistent exit codes by [@​bertschneider](https://togithub.com/bertschneider) in [CodeIntelligenceTesting/jazzer.js#617 - **Bugfix**: Patch coverage of implicit else branches by [@​bertschneider](https://togithub.com/bertschneider) in [CodeIntelligenceTesting/jazzer.js#635 **Full Changelog**: CodeIntelligenceTesting/jazzer.js@v2.0.0...v2.1.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/xmldom/xmldom). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuMzEuNSIsInRhcmdldEJyYW5jaCI6Im1hc3RlciJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@jazzer.js/jest-runner](https://togithub.com/CodeIntelligenceTesting/jazzer.js) | [`2.0.0` -> `2.1.0`](https://renovatebot.com/diffs/npm/@jazzer.js%2fjest-runner/2.0.0/2.1.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@jazzer.js%2fjest-runner/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@jazzer.js%2fjest-runner/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@jazzer.js%2fjest-runner/2.0.0/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@jazzer.js%2fjest-runner/2.0.0/2.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>CodeIntelligenceTesting/jazzer.js (@​jazzer.js/jest-runner)</summary> ### [`v2.1.0`](https://togithub.com/CodeIntelligenceTesting/jazzer.js/releases/tag/v2.1.0): Release 2.1.0 [Compare Source](https://togithub.com/CodeIntelligenceTesting/jazzer.js/compare/v2.0.0...v2.1.0) <!-- Release notes generated using configuration in .github/release.yml at main --> #### What's Changed - **Feature**: Jest support: List fuzz test names by [@​zgtm](https://togithub.com/zgtm) in [CodeIntelligenceTesting/jazzer.js#606 - **Feature**: Handle real segfaults in fuzz targets by [@​br-lewis](https://togithub.com/br-lewis) in [CodeIntelligenceTesting/jazzer.js#602 - **Feature**: Provide consistent exit codes by [@​bertschneider](https://togithub.com/bertschneider) in [CodeIntelligenceTesting/jazzer.js#617 - **Bugfix**: Patch coverage of implicit else branches by [@​bertschneider](https://togithub.com/bertschneider) in [CodeIntelligenceTesting/jazzer.js#635 **Full Changelog**: CodeIntelligenceTesting/jazzer.js@v2.0.0...v2.1.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/xmldom/xmldom). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMS41IiwidXBkYXRlZEluVmVyIjoiMzcuMzEuNSIsInRhcmdldEJyYW5jaCI6Im1hc3RlciJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This change uses the possibility to stop the fuzzer loop provided in the patched
libFuzzer version. Incorporating this allows the removal of the stopFuzzing
functions and general simplifications of the fuzzing process.
The core fuzzing function now returns the expected exit code and found error so
that invoking code can handle them according to its needs, e.g. exit the
process with the given code in case of CLI, and rethrow the error in case of
Jest.