From 2312c13aa2188451244b40a920f12f6f946cbf35 Mon Sep 17 00:00:00 2001 From: Gary Date: Fri, 28 Sep 2018 20:44:39 -0400 Subject: [PATCH] restore classLoaderMatcher to make instrumentation safer --- .../instrumentation/servlet-2/servlet-2.gradle | 4 +++- .../servlet2/AbstractServlet2Instrumentation.java | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/servlet-2/servlet-2.gradle b/dd-java-agent/instrumentation/servlet-2/servlet-2.gradle index 6087cf7dba..1910352f6c 100644 --- a/dd-java-agent/instrumentation/servlet-2/servlet-2.gradle +++ b/dd-java-agent/instrumentation/servlet-2/servlet-2.gradle @@ -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" diff --git a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/AbstractServlet2Instrumentation.java b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/AbstractServlet2Instrumentation.java index 1b851a7483..75a82b5a74 100644 --- a/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/AbstractServlet2Instrumentation.java +++ b/dd-java-agent/instrumentation/servlet-2/src/main/java/datadog/trace/instrumentation/servlet2/AbstractServlet2Instrumentation.java @@ -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 classLoaderMatcher() { + return not(classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener")); + } + @Override public String[] helperClassNames() { return new String[] {