diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java index 0f08e5019b7..617b8d707ce 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jdbc/JDBCConnectionUrlParser.java @@ -760,8 +760,9 @@ DBInfo.Builder doParse(final String jdbcUrl, final DBInfo.Builder builder) { if (portLoc > 0) { hostEndLoc = portLoc; + final int portEndLoc = dbLoc > 0 ? dbLoc : (paramLoc > 0 ? paramLoc : details.length()); try { - builder.port(Integer.parseInt(details.substring(portLoc + 1, dbLoc))); + builder.port(Integer.parseInt(details.substring(portLoc + 1, portEndLoc))); } catch (final NumberFormatException ignored) { } } else if (dbLoc > 0) { diff --git a/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCConnectionUrlParserTest.groovy b/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCConnectionUrlParserTest.groovy index 27e78623117..eb3b7abfb3e 100644 --- a/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCConnectionUrlParserTest.groovy +++ b/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCConnectionUrlParserTest.groovy @@ -198,6 +198,9 @@ class JDBCConnectionUrlParserTest extends InstrumentationSpecification { "jdbc:jtds:sqlserver://dbhostname.com;user=user;password=pw" | null | "jtds" | "sqlserver" | "user" | "dbhostname.com" | 1433 | null | null "jdbc:jtds:sqlserver://dbhostname.com" | null | "jtds" | "sqlserver" | null | "dbhostname.com" | 1433 | null | null "jdbc:jtds:sybase://dbhostname.com" | null | "jtds" | "sybase" | null | "dbhostname.com" | 7100 | null | null + // host:port with no trailing '/db' and no ';' params (regression: StringIndexOutOfBoundsException) + "jdbc:jtds:sqlserver://dbhostname.com:1433" | null | "jtds" | "sqlserver" | null | "dbhostname.com" | 1433 | null | null + "jdbc:jtds:sqlserver://dbhostname.com:1433;user=user;password=pw" | null | "jtds" | "sqlserver" | "user" | "dbhostname.com" | 1433 | null | null // redshift "jdbc:redshift://redshift-cluster-1.c7arcolffyvk.us-east-2.redshift.amazonaws.com:5439/dev" | null | "redshift" | null | null | "redshift-cluster-1.c7arcolffyvk.us-east-2.redshift.amazonaws.com" | 5439 | "redshift-cluster-1" | "dev"