aboutsummaryrefslogtreecommitdiff
path: root/agent
diff options
context:
space:
mode:
authorFabian Meumertzheim <meumertzheim@code-intelligence.com>2021-05-21 09:47:51 +0200
committerFabian Meumertzheim <fabian@meumertzhe.im>2021-05-21 16:00:32 +0200
commitb08828efdf162a099efcfdf2a6ea6bba3e3b1769 (patch)
treee06ac25cdf3bf1af7e448b330c0c8f166a0301cb /agent
parent7d40c0edf3fac891ff59a1c0f385abed933a8fbe (diff)
downloadjazzer-api-b08828efdf162a099efcfdf2a6ea6bba3e3b1769.tar.gz
Let matcher match both normal and internal class names
This makes using the matcher less error-prone and prevents an incorrect log line listing all, rather than all relevant, dependencies of custom hooks.
Diffstat (limited to 'agent')
-rw-r--r--agent/src/main/java/com/code_intelligence/jazzer/agent/RuntimeInstrumentor.kt24
1 files changed, 15 insertions, 9 deletions
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 87ec7fac..0d643c2d 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
@@ -62,8 +62,8 @@ class SimpleGlobMatcher(val glob: String) {
private val prefix: String
init {
- // Map class names to internal class names and remain compatible with globs such as "\\[" that use escaping.
- val pattern = glob.replace('.', '/').replace("\\", "")
+ // Remain compatible with globs such as "\\[" that use escaping.
+ val pattern = glob.replace("\\", "")
when {
!pattern.contains('*') -> {
type = Type.FULL_MATCH
@@ -85,13 +85,19 @@ class SimpleGlobMatcher(val glob: String) {
}
}
- fun matches(internalClassName: String) = when (type) {
- Type.FULL_MATCH -> internalClassName == prefix
- Type.PATH_WILDCARD_SUFFIX -> internalClassName.startsWith(prefix)
- Type.SEGMENT_WILDCARD_SUFFIX -> {
- // className starts with prefix and contains no further '/'.
- internalClassName.startsWith(prefix) &&
- internalClassName.indexOf('/', startIndex = prefix.length) == -1
+ /**
+ * Checks whether [maybeInternalClassName], which may be internal (foo/bar) or not (foo.bar), matches [glob].
+ */
+ fun matches(maybeInternalClassName: String): Boolean {
+ val className = maybeInternalClassName.replace('/', '.')
+ return when (type) {
+ Type.FULL_MATCH -> className == prefix
+ Type.PATH_WILDCARD_SUFFIX -> className.startsWith(prefix)
+ Type.SEGMENT_WILDCARD_SUFFIX -> {
+ // className starts with prefix and contains no further '.'.
+ className.startsWith(prefix) &&
+ className.indexOf('.', startIndex = prefix.length) == -1
+ }
}
}
}