aboutsummaryrefslogtreecommitdiff
path: root/agent
diff options
context:
space:
mode:
authorKhaled Yakdan <yakdan@code-intelligence.de>2021-10-20 18:23:39 +0200
committerGitHub <noreply@github.com>2021-10-20 16:23:39 +0000
commit778957183c0973b0b6befd37afbf619f8e5bdbc1 (patch)
treec6685e962b33e1c70355d5ebb9abfa161b23c706 /agent
parentaf4ca0be2def2acfe06d39638dbf38928c430c44 (diff)
downloadjazzer-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.kt2
-rw-r--r--agent/src/main/java/com/code_intelligence/jazzer/agent/RuntimeInstrumentor.kt2
-rw-r--r--agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java15
-rw-r--r--agent/src/main/java/com/code_intelligence/jazzer/instrumentor/CoverageRecorder.kt1
-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,