From 37f9d28d996339b9dc0287b58f6e1cc000b42f7b Mon Sep 17 00:00:00 2001 From: Douglas Q Hawkins Date: Tue, 1 Sep 2026 22:04:08 -0400 Subject: [PATCH] Guard Undertow port() against internal NPE HttpServerExchange.getHostPort() can NPE inside Undertow itself when there's no Host header, the scheme isn't http/https, and the connection's local address isn't an InetSocketAddress (e.g. AJP or a Unix domain socket transport). Fall back to 0 (the existing "no port" sentinel used throughout URIUtils) rather than letting the NPE propagate into the instrumented application. Co-Authored-By: Claude Sonnet 5 --- .../undertow/HttpServerExchangeURIDataAdapter.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/undertow/undertow-common/src/main/java/datadog/trace/instrumentation/undertow/HttpServerExchangeURIDataAdapter.java b/dd-java-agent/instrumentation/undertow/undertow-common/src/main/java/datadog/trace/instrumentation/undertow/HttpServerExchangeURIDataAdapter.java index a9dbc130978..947dcefb887 100644 --- a/dd-java-agent/instrumentation/undertow/undertow-common/src/main/java/datadog/trace/instrumentation/undertow/HttpServerExchangeURIDataAdapter.java +++ b/dd-java-agent/instrumentation/undertow/undertow-common/src/main/java/datadog/trace/instrumentation/undertow/HttpServerExchangeURIDataAdapter.java @@ -22,7 +22,13 @@ public String host() { @Override public int port() { - return httpServerExchange.getHostPort(); + try { + return httpServerExchange.getHostPort(); + } catch (final NullPointerException e) { + // Undertow's getHostPort() can NPE internally (e.g. no Host header and a connection whose + // local address isn't an InetSocketAddress, such as AJP or a Unix domain socket transport). + return 0; + } } @Override