-
Notifications
You must be signed in to change notification settings - Fork 138
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
Jazzer Pro #906
Jazzer Pro #906
Conversation
This also requires updating rules_kotlin, which in turn requires some changes to target names.
Remove flags that are now enabled by default and silence a javac warning caused by compiling for Java 8 on JDK 21.
Locally, we compile against and run tests on JDK 21, which gives us the best performance as well as the ability to (conditionally) use newer APIs without having to resort to reflection.
Tests that were already executed on PRs don't need to run again after a commit, as a linear history is enforced. Furthermore, fuzz tests and the end to end test don't need to be executed on every PR change.
Executing tests on Windows and mac only with the latest JDK version in PRs reduces the pipeline execution time without reducing the test coverage.
Catch issues in tests via assertions instead of `IndexOutOfBoundsException`s.
This new method allows an implementation of the analogue of `withoutInit()` for `ValueMutator`s. Also add support to all collection mutators.
The mutator is based on a generic mutator for aggregates of immutable type, i.e., classes with a "constructor" (that can also be a static factory method) and matching getters. This component can be reused for immutable objects that aren't Records, e.g. `@AutoValue`s.
Tagging java_export targets with no-sources prevents the publish of its sources jar.
Artifactory doesn't need signed artifacts, which removed some complexity from the release process. As releases are private, publishing of java docs and docker images is deactivated for now.
Previously, we had two different versions of Protobuf on the classpath. Since the outdated one was at the very back, it didn't matter.
Along the way implement `getAnnotatedOwnerType` in terms of the base type's owner type on JDK 9+.
The hierarchy consisting of the concrete class `ChainedMutatorFactory` and the abstract class `MutatorFactory` is split into three parts: * A functional interface `MutatorFactory` implemented by the individual `MutatorFactory`s with a single method that is passed an `ExtendedMutatorFactory`, which allows individual mutator factories to use additional features available on that class, but not individual mutators. * An abstract class `ExtendedMutatorFactory` with additional convenience functions that is part of the `api` package. * A concrete implementation in the form of the existing `ChainedMutatorFactory`, which can be moved to the `engine` package and thus start using mutator combinators in a follow-up PR. Along the way, the nesting of `ChainedMutatorFactory`s is replaced with a single top-level instance, which allows for state to be tracked for a given mutator and its child mutators, but not sibling mutators.
Mutators can be interned by `AnnotatedType` and a are only used for the current mutator and child mutator constructions, not sibling mutator constructions.
When a record contains two fields that have the same record type, these fields are no longer unconditionally treated as recursive.
With `JAZZER_MUTATOR_DEBUG=1`, the attempts at constructing a mutator are emitted in a tree structure.
All usages of this function could be replaced with only slightly more verbose usages of `TypeHolder`, `ParameterHolder` or by looking up `AnnotatedType`s via reflection directly. This saves us from having to maintain yet another `AnnotatedType` factory.
Comparing only the first or last part of a String in the startsWith and endsWith hooks greatly improves the fuzzing performance.
We should add this again to the CI after fixing the issues with setting up the Android SDK
eac8faa
to
e5c791d
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.
The branch looks good to me.
I confirmed that
bazel build //:jazzer_release
and
bazel test //...
are working on a fresh install and tested out some projects.
If you are interested, I could send a follow-up PR that wires up the LICENSE/NOTICE file with Bazel's way of tying a project to license information. That would make license restrictions more visible to anyone using Jazzer. |
@fmeum That would be awesome! Could you push this change to this branch directly or create a PR on this branch so that I can integrate it with the first commit that changes the license? |
Make the latest version of Jazzer available in the public repository under a new license, allowing for use with open-source projects, academic research, and automated analysis for all projects in OSS-Fuzz.