diff options
author | Fabian Meumertzheim <meumertzheim@code-intelligence.com> | 2021-05-21 09:47:51 +0200 |
---|---|---|
committer | Fabian Meumertzheim <fabian@meumertzhe.im> | 2021-05-21 16:00:32 +0200 |
commit | b08828efdf162a099efcfdf2a6ea6bba3e3b1769 (patch) | |
tree | e06ac25cdf3bf1af7e448b330c0c8f166a0301cb /agent | |
parent | 7d40c0edf3fac891ff59a1c0f385abed933a8fbe (diff) | |
download | jazzer-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.kt | 24 |
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 + } } } } |