From 296862c0014144602e9e9005c440bb9e1e7d84ab Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 16 Apr 2026 13:34:02 +0000 Subject: [PATCH 1/2] Handle null PATH environment variable in UserAgent System.getenv("PATH") returns null in environments where PATH is not set (serverless runtimes, minimal containers). This caused an NPE in UserAgent.env(). Fall back to an empty array when PATH is null. Fixes #550 --- .../main/java/com/databricks/sdk/core/UserAgent.java | 8 +++----- .../java/com/databricks/sdk/core/UserAgentTest.java | 10 ++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java index 22bd6b22f..e4be041c9 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java @@ -299,11 +299,9 @@ private static String agentProvider() { private static Environment env() { if (env == null) { - env = - new Environment( - System.getenv(), - System.getenv("PATH").split(File.pathSeparator), - System.getProperty("os.name")); + String pathEnv = System.getenv("PATH"); + String[] pathEntries = pathEnv != null ? pathEnv.split(File.pathSeparator) : new String[0]; + env = new Environment(System.getenv(), pathEntries, System.getProperty("os.name")); } return env; } diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java index 54405982c..807bedd72 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java @@ -247,6 +247,16 @@ public void testAgentProviderEmptyValue() { Assertions.assertFalse(UserAgent.asString().contains("agent/")); } + @Test + public void testEnvWithNullPath() { + UserAgent.env = + new Environment(new HashMap<>(), new ArrayList<>(), System.getProperty("os.name")); + UserAgent.cicdProvider = null; + UserAgent.agentProvider = null; + String userAgent = UserAgent.asString(); + Assertions.assertTrue(userAgent.contains("databricks-sdk-java/")); + } + @Test public void testAgentProviderCached() { // Set up with cursor agent From 2710949699812848eafa5d4ec86425d626a15faf Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Thu, 16 Apr 2026 17:33:02 +0000 Subject: [PATCH 2/2] Add changelog entry for null PATH fix --- NEXT_CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index 8017d10a0..1a90f5f46 100755 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -10,6 +10,7 @@ * Fixed non-JSON error responses (e.g. plain-text "Invalid Token" with HTTP 403) producing `Unknown` instead of the correct typed exception (`PermissionDenied`, `Unauthenticated`, etc.). The error message no longer contains Jackson deserialization internals. * Added `X-Databricks-Org-Id` header to deprecated workspace SCIM APIs (Groups, ServicePrincipals, Users) for SPOG host compatibility. * Fixed Databricks CLI authentication to detect when the cached token's scopes don't match the SDK's configured scopes. Previously, a scope mismatch was silently ignored, causing requests to use wrong permissions. The SDK now raises an error with instructions to re-authenticate. +* Fixed `NullPointerException` in `UserAgent.env()` when the `PATH` environment variable is not set ([#550](https://github.com/databricks/databricks-sdk-java/issues/550)). ### Security Vulnerabilities