diff options
author | Khaled Yakdan <yakdan@code-intelligence.de> | 2021-10-20 18:23:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-20 16:23:39 +0000 |
commit | 778957183c0973b0b6befd37afbf619f8e5bdbc1 (patch) | |
tree | c6685e962b33e1c70355d5ebb9abfa161b23c706 /agent | |
parent | af4ca0be2def2acfe06d39638dbf38928c430c44 (diff) | |
download | jazzer-api-778957183c0973b0b6befd37afbf619f8e5bdbc1.tar.gz |
Enable globbing for exceptions to be ignored, e.g., --autofuzz_ignore="java.lang.*"
Diffstat (limited to 'agent')
-rw-r--r-- | agent/src/main/java/com/code_intelligence/jazzer/agent/Agent.kt | 2 | ||||
-rw-r--r-- | agent/src/main/java/com/code_intelligence/jazzer/agent/RuntimeInstrumentor.kt | 2 | ||||
-rw-r--r-- | agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java | 15 | ||||
-rw-r--r-- | agent/src/main/java/com/code_intelligence/jazzer/instrumentor/CoverageRecorder.kt | 1 | ||||
-rw-r--r-- | agent/src/main/java/com/code_intelligence/jazzer/utils/ClassNameGlobber.kt (renamed from agent/src/main/java/com/code_intelligence/jazzer/instrumentor/ClassNameGlobber.kt) | 4 |
5 files changed, 20 insertions, 4 deletions
diff --git a/agent/src/main/java/com/code_intelligence/jazzer/agent/Agent.kt b/agent/src/main/java/com/code_intelligence/jazzer/agent/Agent.kt index f58e3a9d..cd8d7255 100644 --- a/agent/src/main/java/com/code_intelligence/jazzer/agent/Agent.kt +++ b/agent/src/main/java/com/code_intelligence/jazzer/agent/Agent.kt @@ -16,11 +16,11 @@ package com.code_intelligence.jazzer.agent -import com.code_intelligence.jazzer.instrumentor.ClassNameGlobber import com.code_intelligence.jazzer.instrumentor.CoverageRecorder import com.code_intelligence.jazzer.instrumentor.InstrumentationType import com.code_intelligence.jazzer.instrumentor.loadHooks import com.code_intelligence.jazzer.runtime.ManifestUtils +import com.code_intelligence.jazzer.utils.ClassNameGlobber import java.io.File import java.lang.instrument.Instrumentation import java.nio.file.Paths diff --git a/agent/src/main/java/com/code_intelligence/jazzer/agent/RuntimeInstrumentor.kt b/agent/src/main/java/com/code_intelligence/jazzer/agent/RuntimeInstrumentor.kt index 8599d76a..35c590c7 100644 --- a/agent/src/main/java/com/code_intelligence/jazzer/agent/RuntimeInstrumentor.kt +++ b/agent/src/main/java/com/code_intelligence/jazzer/agent/RuntimeInstrumentor.kt @@ -15,7 +15,6 @@ package com.code_intelligence.jazzer.agent import com.code_intelligence.jazzer.instrumentor.ClassInstrumentor -import com.code_intelligence.jazzer.instrumentor.ClassNameGlobber import com.code_intelligence.jazzer.instrumentor.CoverageRecorder import com.code_intelligence.jazzer.instrumentor.Hook import com.code_intelligence.jazzer.instrumentor.InstrumentationType @@ -24,6 +23,7 @@ import com.code_intelligence.jazzer.runtime.NativeLibHooks import com.code_intelligence.jazzer.runtime.TraceCmpHooks import com.code_intelligence.jazzer.runtime.TraceDivHooks import com.code_intelligence.jazzer.runtime.TraceIndirHooks +import com.code_intelligence.jazzer.utils.ClassNameGlobber import java.lang.instrument.ClassFileTransformer import java.lang.instrument.Instrumentation import java.nio.file.Path diff --git a/agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java b/agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java index 87972a89..ea1b9a96 100644 --- a/agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java +++ b/agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java @@ -15,6 +15,7 @@ package com.code_intelligence.jazzer.autofuzz; import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import com.code_intelligence.jazzer.utils.SimpleGlobMatcher; import com.code_intelligence.jazzer.utils.Utils; import java.io.Closeable; import java.io.UnsupportedEncodingException; @@ -25,6 +26,7 @@ import java.net.URLDecoder; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -34,6 +36,7 @@ public class FuzzTarget { private static String methodReference; private static Executable[] targetExecutables; private static Map<Executable, Class<?>[]> throwsDeclarations; + private static Set<SimpleGlobMatcher> ignoredExceptionMatchers; private static long executionsSinceLastInvocation = 0; public static void fuzzerInitialize(String[] args) { @@ -142,9 +145,17 @@ public class FuzzTarget { } System.exit(1); } + + ignoredExceptionMatchers = Arrays.stream(args) + .skip(1) + .filter(s -> s.contains("*")) + .map(SimpleGlobMatcher::new) + .collect(Collectors.toSet()); + List<Class<?>> alwaysIgnore = Arrays.stream(args) .skip(1) + .filter(s -> !s.contains("*")) .map(name -> { try { return ClassLoader.getSystemClassLoader().loadClass(name); @@ -208,6 +219,10 @@ public class FuzzTarget { return; } } + + if (ignoredExceptionMatchers.stream().anyMatch(m -> m.matches(causeClass.getName()))) { + return; + } cleanStackTraces(cause); throw cause; } catch (Throwable t) { diff --git a/agent/src/main/java/com/code_intelligence/jazzer/instrumentor/CoverageRecorder.kt b/agent/src/main/java/com/code_intelligence/jazzer/instrumentor/CoverageRecorder.kt index d1906c82..65956189 100644 --- a/agent/src/main/java/com/code_intelligence/jazzer/instrumentor/CoverageRecorder.kt +++ b/agent/src/main/java/com/code_intelligence/jazzer/instrumentor/CoverageRecorder.kt @@ -23,6 +23,7 @@ import com.code_intelligence.jazzer.third_party.jacoco.core.data.ExecutionDataWr import com.code_intelligence.jazzer.third_party.jacoco.core.data.SessionInfo import com.code_intelligence.jazzer.third_party.jacoco.core.data.SessionInfoStore import com.code_intelligence.jazzer.third_party.jacoco.core.internal.data.CRC64 +import com.code_intelligence.jazzer.utils.ClassNameGlobber import io.github.classgraph.ClassGraph import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream diff --git a/agent/src/main/java/com/code_intelligence/jazzer/instrumentor/ClassNameGlobber.kt b/agent/src/main/java/com/code_intelligence/jazzer/utils/ClassNameGlobber.kt index 3dc583fb..1f09afe3 100644 --- a/agent/src/main/java/com/code_intelligence/jazzer/instrumentor/ClassNameGlobber.kt +++ b/agent/src/main/java/com/code_intelligence/jazzer/utils/ClassNameGlobber.kt @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.code_intelligence.jazzer.instrumentor +package com.code_intelligence.jazzer.utils import java.lang.IllegalArgumentException @@ -47,7 +47,7 @@ class ClassNameGlobber(includes: List<String>, excludes: List<String>) { } } -private class SimpleGlobMatcher(val glob: String) { +class SimpleGlobMatcher(val glob: String) { private enum class Type { // foo.bar (matches foo.bar only) FULL_MATCH, |