Skip to content

Commit 3495db7

Browse files
committed
Fix sanitizers not being loaded with jazzer_standalone_deploy.jar
I forgot to add the deploy manifest line to `jazzer_standalone_deploy.jar`. Since this is error-prone, use code generation to load the list of built-in hooks instead in a single location. Also add a check to verify that built-in hooks are loaded. This would have let existing tests catch this regression.
1 parent c2d641e commit 3495db7

6 files changed

Lines changed: 8 additions & 14 deletions

File tree

agent/src/main/java/com/code_intelligence/jazzer/agent/Agent.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.code_intelligence.jazzer.driver.Opt
2020
import com.code_intelligence.jazzer.instrumentor.CoverageRecorder
2121
import com.code_intelligence.jazzer.instrumentor.Hooks
2222
import com.code_intelligence.jazzer.instrumentor.InstrumentationType
23+
import com.code_intelligence.jazzer.sanitizers.Constants
2324
import com.code_intelligence.jazzer.utils.ClassNameGlobber
2425
import com.code_intelligence.jazzer.utils.ManifestUtils
2526
import java.lang.instrument.Instrumentation
@@ -32,7 +33,8 @@ fun install(instrumentation: Instrumentation) {
3233
ManifestUtils.combineManifestValues(ManifestUtils.HOOK_CLASSES).flatMap {
3334
it.split(':')
3435
}.filter { it.isNotBlank() }
35-
val allCustomHookNames = (manifestCustomHookNames + Opt.customHooks).toSet()
36+
val allCustomHookNames = (Constants.SANITIZER_HOOK_NAMES + manifestCustomHookNames + Opt.customHooks).toSet()
37+
check(allCustomHookNames.isNotEmpty()) { "No hooks registered; expected at least the built-in hooks" }
3638
val disabledCustomHookNames = Opt.disabledHooks.toSet()
3739
val customHookNames = allCustomHookNames - disabledCustomHookNames
3840
val disabledCustomHooksToPrint = allCustomHookNames - customHookNames.toSet()

agent/src/main/java/com/code_intelligence/jazzer/agent/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,6 @@ kt_jvm_library(
2525
"//agent/src/main/java/com/code_intelligence/jazzer/utils:class_name_globber",
2626
"//agent/src/main/java/com/code_intelligence/jazzer/utils:manifest_utils",
2727
"//driver/src/main/java/com/code_intelligence/jazzer/driver:opt",
28+
"//sanitizers/src/main/java/com/code_intelligence/jazzer/sanitizers:constants",
2829
],
2930
)

driver/src/main/java/com/code_intelligence/jazzer/BUILD.bazel

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,6 @@ jar_jar(
5050
rules = "jazzer_shade_rules.jarjar",
5151
)
5252

53-
DEPLOY_MANIFEST_LINES = [
54-
"Jazzer-Hook-Classes: ",
55-
] + [" {}:".format(c) for c in SANITIZER_CLASSES]
56-
5753
java_binary(
5854
name = "jazzer_unshaded",
5955
# Note: We can't add
@@ -64,7 +60,6 @@ java_binary(
6460
"//agent/src/main/java/com/code_intelligence/jazzer/api:api_deploy_env",
6561
"//agent/src/main/java/com/code_intelligence/jazzer/runtime:jazzer_bootstrap_env",
6662
],
67-
deploy_manifest_lines = DEPLOY_MANIFEST_LINES,
6863
main_class = "com.code_intelligence.jazzer.Jazzer",
6964
runtime_deps = [":jazzer_lib"],
7065
)
@@ -91,7 +86,6 @@ strip_jar(
9186
# The _deploy-src.jar for this target includes the sources for the jazzer_bootstrap library.
9287
java_binary(
9388
name = "jazzer_transitive_sources",
94-
deploy_manifest_lines = DEPLOY_MANIFEST_LINES,
9589
main_class = "com.code_intelligence.jazzer.Jazzer",
9690
runtime_deps = [
9791
":jazzer_lib",

driver/src/main/java/com/code_intelligence/jazzer/junit/AgentConfigurator.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414

1515
package com.code_intelligence.jazzer.junit;
1616

17-
import static com.code_intelligence.jazzer.sanitizers.Constants.SANITIZER_HOOK_NAMES;
18-
1917
import java.io.File;
2018
import java.util.concurrent.atomic.AtomicBoolean;
2119
import org.junit.jupiter.api.extension.ExtensionContext;
@@ -56,7 +54,6 @@ static void forFuzzing(ExecutionRequest executionRequest, Class<?> fuzzTestClass
5654
}
5755

5856
private static void applyCommonConfiguration() {
59-
System.setProperty("jazzer.custom_hooks", SANITIZER_HOOK_NAMES);
6057
// Do not hook common IDE and JUnit classes and their dependencies.
6158
System.setProperty("jazzer.custom_hook_excludes",
6259
String.join(File.pathSeparator, "com.google.testing.junit.**", "com.intellij.**",

driver/src/main/java/com/code_intelligence/jazzer/junit/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ java_library(
1616
],
1717
deps = [
1818
":utils",
19-
"//sanitizers/src/main/java/com/code_intelligence/jazzer/sanitizers:constants",
2019
"@maven//:org_junit_jupiter_junit_jupiter_api",
2120
"@maven//:org_junit_platform_junit_platform_engine",
2221
],

sanitizers/src/main/java/com/code_intelligence/jazzer/sanitizers/BUILD.bazel

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,18 @@ kt_jvm_library(
4646
java_library(
4747
name = "constants",
4848
srcs = [":constants_java"],
49-
visibility = ["//visibility:public"],
49+
visibility = ["//agent/src/main/java/com/code_intelligence/jazzer/agent:__pkg__"],
5050
)
5151

5252
write_file(
5353
name = "constants_java",
5454
out = "Constants.java",
5555
content = [
5656
"package com.code_intelligence.jazzer.sanitizers;",
57-
"import java.io.File;",
57+
"import java.util.Arrays;",
58+
"import java.util.List;",
5859
"public final class Constants {",
59-
" public static final String SANITIZER_HOOK_NAMES = \"%s\";" % "\" + File.pathSeparator + \"".join(SANITIZER_CLASSES),
60+
" public static final List<String> SANITIZER_HOOK_NAMES = Arrays.asList(%s);" % ", ".join(["\"%s\"" % name for name in SANITIZER_CLASSES]),
6061
"}",
6162
],
6263
)

0 commit comments

Comments
 (0)