restore classLoaderMatcher to make instrumentation safer

This commit is contained in:
Gary 2018-09-28 20:44:39 -04:00
parent 80b4a9790c
commit 2312c13aa2
No known key found for this signature in database
GPG Key ID: 0CB168EE6C6844B7
2 changed files with 13 additions and 1 deletions

View File

@ -2,9 +2,11 @@ muzzle {
pass {
group = "javax.servlet"
module = "servlet-api"
versions = "[2.3, 2.5]"
versions = "[2.3, 3.0)"
assertInverse = true
}
// can't add a fail block for servlet 3, because servlet 3 is backward compatible with servlet 2.3+,
// meaning that for every class that exists in servlet 2, it also exists in servlet 3
}
apply from: "${rootDir}/gradle/java.gradle"

View File

@ -1,6 +1,10 @@
package datadog.trace.instrumentation.servlet2;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
import static net.bytebuddy.matcher.ElementMatchers.not;
import datadog.trace.agent.tooling.Instrumenter;
import net.bytebuddy.matcher.ElementMatcher;
public abstract class AbstractServlet2Instrumentation extends Instrumenter.Default {
@ -8,6 +12,12 @@ public abstract class AbstractServlet2Instrumentation extends Instrumenter.Defau
super("servlet", "servlet-2");
}
// this is required to make sure servlet 2 instrumentation won't apply to servlet 3
@Override
public ElementMatcher<ClassLoader> classLoaderMatcher() {
return not(classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"));
}
@Override
public String[] helperClassNames() {
return new String[] {