From 431ddf9b7647a88bf36b004d94bfaff940c1f92b Mon Sep 17 00:00:00 2001 From: Muhammad Haseeb Ahmad Date: Thu, 20 Oct 2022 00:55:58 +0000 Subject: [PATCH] Output shared dependendencies of JNI libs for Java fuzzers Test: m example_java_jni_fuzzer Bug: 252846698 Change-Id: Ib583de335482350bfe293f9c3d021a595edd4f44 --- cc/fuzz.go | 9 ++++++--- java/fuzz.go | 6 ++++-- rust/fuzz.go | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/cc/fuzz.go b/cc/fuzz.go index 13c94adb3..0fbe45c8e 100644 --- a/cc/fuzz.go +++ b/cc/fuzz.go @@ -264,7 +264,7 @@ func (fuzzBin *fuzzBinary) install(ctx ModuleContext, file android.Path) { } // Grab the list of required shared libraries. - fuzzBin.sharedLibraries = CollectAllSharedDependencies(ctx) + fuzzBin.sharedLibraries, _ = CollectAllSharedDependencies(ctx) for _, lib := range fuzzBin.sharedLibraries { fuzzBin.installedSharedDeps = append(fuzzBin.installedSharedDeps, @@ -478,9 +478,10 @@ func GetSharedLibsToZip(sharedLibraries android.Paths, module LinkableInterface, // VisitDirectDeps is used first to avoid incorrectly using the core libraries (sanitizer // runtimes, libc, libdl, etc.) from a dependency. This may cause issues when dependencies // have explicit sanitizer tags, as we may get a dependency on an unsanitized libc, etc. -func CollectAllSharedDependencies(ctx android.ModuleContext) android.Paths { +func CollectAllSharedDependencies(ctx android.ModuleContext) (android.Paths, []android.Module) { seen := make(map[string]bool) recursed := make(map[string]bool) + deps := []android.Module{} var sharedLibraries android.Paths @@ -494,6 +495,7 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) android.Paths { return } seen[ctx.OtherModuleName(dep)] = true + deps = append(deps, dep) sharedLibraries = append(sharedLibraries, android.OutputFileForModule(ctx, dep, "unstripped")) }) @@ -503,6 +505,7 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) android.Paths { } if !seen[ctx.OtherModuleName(child)] { seen[ctx.OtherModuleName(child)] = true + deps = append(deps, child) sharedLibraries = append(sharedLibraries, android.OutputFileForModule(ctx, child, "unstripped")) } @@ -513,5 +516,5 @@ func CollectAllSharedDependencies(ctx android.ModuleContext) android.Paths { return true }) - return sharedLibraries + return sharedLibraries, deps } diff --git a/java/fuzz.go b/java/fuzz.go index 848d364f1..1d6b91346 100644 --- a/java/fuzz.go +++ b/java/fuzz.go @@ -104,7 +104,9 @@ func (j *JavaFuzzLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) j.fuzzPackagedModule.Config = configPath } - ctx.VisitDirectDepsWithTag(cc.JniFuzzLibTag, func(dep android.Module) { + _, sharedDeps := cc.CollectAllSharedDependencies(ctx) + + for _, dep := range sharedDeps { sharedLibInfo := ctx.OtherModuleProvider(dep, cc.SharedLibraryInfoProvider).(cc.SharedLibraryInfo) if sharedLibInfo.SharedLibrary != nil { // The .class jars are output in slightly different locations @@ -127,7 +129,7 @@ func (j *JavaFuzzLibrary) GenerateAndroidBuildActions(ctx android.ModuleContext) } else { ctx.PropertyErrorf("jni_libs", "%q of type %q is not supported", dep.Name(), ctx.OtherModuleType(dep)) } - }) + } j.Library.GenerateAndroidBuildActions(ctx) } diff --git a/rust/fuzz.go b/rust/fuzz.go index 76cf21aa0..6faf55cf6 100644 --- a/rust/fuzz.go +++ b/rust/fuzz.go @@ -91,7 +91,7 @@ func (fuzzer *fuzzDecorator) compile(ctx ModuleContext, flags Flags, deps PathDe out := fuzzer.binaryDecorator.compile(ctx, flags, deps) // Grab the list of required shared libraries. - fuzzer.sharedLibraries = cc.CollectAllSharedDependencies(ctx) + fuzzer.sharedLibraries, _ = cc.CollectAllSharedDependencies(ctx) return out }