Skip to content
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

Merged
merged 185 commits into from
Aug 19, 2024
Merged

Jazzer Pro #906

merged 185 commits into from
Aug 19, 2024

Conversation

kyakdan
Copy link
Member

@kyakdan kyakdan commented Aug 15, 2024

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.

kyakdan and others added 30 commits August 14, 2024 20:01
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.
@kyakdan kyakdan marked this pull request as draft August 15, 2024 05:58
@kyakdan kyakdan marked this pull request as ready for review August 16, 2024 06:35
@kyakdan kyakdan force-pushed the jazzer-pro branch 3 times, most recently from eac8faa to e5c791d Compare August 16, 2024 06:54
LICENSE-JAZZER.txt Outdated Show resolved Hide resolved
Copy link
Member

@MarkusZoppelt MarkusZoppelt left a 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.

LICENSE Show resolved Hide resolved
@fmeum
Copy link
Contributor

fmeum commented Aug 16, 2024

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.

@kyakdan
Copy link
Member Author

kyakdan commented Aug 16, 2024

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?

@fmeum
Copy link
Contributor

fmeum commented Aug 16, 2024

@kyakdan I sent #907.

@kyakdan kyakdan merged commit aa376ca into main Aug 19, 2024
5 checks passed
@kyakdan kyakdan deleted the jazzer-pro branch August 19, 2024 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants