From ec2b7ec5edcc58c9bc15fca5967af7e3034fbfa6 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Thu, 15 Jan 2026 17:23:36 -0500 Subject: [PATCH 1/3] Use slf4j-simple as default; logback has a high chance of getting stuck in a deadlock on CI. --- .../instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle index 6a0d64a5900..823193ea978 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle @@ -1,4 +1,6 @@ apply from: "$rootDir/gradle/java.gradle" +// Use slf4j-simple as default; logback has a high chance of getting stuck in a deadlock on CI. +apply from: "$rootDir/gradle/slf4j-simple.gradle" testJvmConstraints { // TODO Java 17: This version of vertx-web doesn't support Java 17 @@ -49,3 +51,4 @@ dependencies { latestDepTestImplementation group: 'io.vertx', name: 'vertx-web', version: '3.+' latestDepTestImplementation group: 'io.vertx', name: 'vertx-web-client', version: '3.+' } + From 00d4a729020c92d7515f189554a9ec1338315f42 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Thu, 15 Jan 2026 18:20:57 -0500 Subject: [PATCH 2/3] Relaxed checks for Logback. --- .../IastRequestContextPreparationTrait.groovy | 17 +++++++---- .../datadog/trace/api/iast/Taintable.java | 29 +++++++++++-------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestContextPreparationTrait.groovy b/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestContextPreparationTrait.groovy index 63fe1efac77..22fba9e41b3 100644 --- a/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestContextPreparationTrait.groovy +++ b/dd-java-agent/agent-iast/iast-test-fixtures/src/main/groovy/com/datadog/iast/test/IastRequestContextPreparationTrait.groovy @@ -5,14 +5,19 @@ import com.datadog.iast.IastSystem import com.datadog.iast.model.Range import com.datadog.iast.taint.TaintedObject import com.datadog.iast.taint.TaintedObjects -import datadog.trace.api.gateway.* +import datadog.trace.api.gateway.CallbackProvider +import datadog.trace.api.gateway.EventType +import datadog.trace.api.gateway.Events +import datadog.trace.api.gateway.Flow +import datadog.trace.api.gateway.IGSpanInfo +import datadog.trace.api.gateway.RequestContext +import datadog.trace.api.gateway.RequestContextSlot import datadog.trace.api.iast.InstrumentationBridge import datadog.trace.bootstrap.instrumentation.api.AgentTracer -import org.slf4j.Logger -import org.slf4j.LoggerFactory - import java.util.function.BiFunction import java.util.function.Supplier +import org.slf4j.Logger +import org.slf4j.LoggerFactory trait IastRequestContextPreparationTrait { @@ -73,7 +78,9 @@ trait IastRequestContextPreparationTrait { private static Logger withLogger(final String name) { final logger = LoggerFactory.getLogger(name) - if (logger instanceof ch.qos.logback.classic.Logger) { + + // Check logger class by name to avoid NoClassDefFoundError at runtime for tests without Logback. + if (logger.class.name == "ch.qos.logback.classic.Logger") { ((ch.qos.logback.classic.Logger) logger).level = ch.qos.logback.classic.Level.DEBUG } return logger diff --git a/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java b/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java index 3b86703d10c..86119c701b5 100644 --- a/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java +++ b/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java @@ -30,18 +30,23 @@ class DebugLogger { private static final Logger LOGGER; static { - try { - LOGGER = LoggerFactory.getLogger("Taintable tainted objects"); - Class levelCls = Class.forName("ch.qos.logback.classic.Level"); - Method setLevel = LOGGER.getClass().getMethod("setLevel", levelCls); - Object debugLevel = levelCls.getField("DEBUG").get(null); - setLevel.invoke(LOGGER, debugLevel); - } catch (IllegalAccessException - | NoSuchFieldException - | ClassNotFoundException - | NoSuchMethodException - | InvocationTargetException e) { - throw new RuntimeException(e); + LOGGER = LoggerFactory.getLogger("Taintable tainted objects"); + + // Check logger class by name to avoid NoClassDefFoundError at runtime for tests without + // Logback. + if (LOGGER.getClass().getName().equals("ch.qos.logback.classic.Logger")) { + try { + Class levelCls = Class.forName("ch.qos.logback.classic.Level"); + Method setLevel = LOGGER.getClass().getMethod("setLevel", levelCls); + Object debugLevel = levelCls.getField("DEBUG").get(null); + setLevel.invoke(LOGGER, debugLevel); + } catch (IllegalAccessException + | NoSuchFieldException + | ClassNotFoundException + | NoSuchMethodException + | InvocationTargetException e) { + throw new RuntimeException(e); + } } } From f6a54229fb63cd9b3ffefef6485645e3dc6ce93b Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Fri, 16 Jan 2026 17:41:00 -0500 Subject: [PATCH 3/3] Minor. --- .../src/main/java/datadog/trace/api/iast/Taintable.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java b/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java index 86119c701b5..3c221426040 100644 --- a/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java +++ b/internal-api/src/main/java/datadog/trace/api/iast/Taintable.java @@ -32,8 +32,8 @@ class DebugLogger { static { LOGGER = LoggerFactory.getLogger("Taintable tainted objects"); - // Check logger class by name to avoid NoClassDefFoundError at runtime for tests without - // Logback. + // Check logger class by name to avoid NoClassDefFoundError at runtime + // for tests without Logback. if (LOGGER.getClass().getName().equals("ch.qos.logback.classic.Logger")) { try { Class levelCls = Class.forName("ch.qos.logback.classic.Level");