From eece978645f0697d54823aa039edb230722c6b09 Mon Sep 17 00:00:00 2001 From: Jon Hopper Date: Mon, 26 Jan 2026 13:11:26 +1300 Subject: [PATCH 1/3] Refactor env() so that when PATH doesn't exsist a NullPointerException isn't thrown --- .../com/databricks/sdk/core/UserAgent.java | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 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 133417c9c..a3581f633 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 @@ -33,10 +33,21 @@ public String getValue() { private static final ArrayList otherInfo = new ArrayList<>(); - // TODO: check if reading from - // /META-INF/maven/com.databricks/databrics-sdk-java/pom.properties - // or getClass().getPackage().getImplementationVersion() is enough. - private static final String version = "0.79.0"; + // Try to get version from package metadata or fallback to hardcoded value + private static final String version; + static { + String v = null; + try { + Package pkg = UserAgent.class.getPackage(); + if (pkg != null) { + v = pkg.getImplementationVersion(); + } + } catch (Exception ignored) {} + if (v == null) { + v = "0.79.0"; + } + version = v; + } public static void withProduct(String product, String productVersion) { UserAgent.product = product; @@ -233,11 +244,16 @@ private static String cicdProvider() { private static Environment env() { if (env == null) { - env = - new Environment( - System.getenv(), - System.getenv("PATH").split(File.pathSeparator), - System.getProperty("os.name")); + Map sysEnv = System.getenv(); + if (sysEnv == null) { + sysEnv = Collections.emptyMap(); + } + String pathVar = sysEnv.get("PATH"); + String[] pathArr = pathVar != null ? pathVar.split(File.pathSeparator) : new String[0]; + env = new Environment( + sysEnv, + pathArr, + System.getProperty("os.name")); } return env; } From 77e89272cda2485c28064d10930a8a4cc92ada61 Mon Sep 17 00:00:00 2001 From: Jon Hopper Date: Mon, 26 Jan 2026 15:04:39 +1300 Subject: [PATCH 2/3] Add test for handling null PATH in UserAgent.env() to prevent NullPointerException --- .../test/java/com/databricks/sdk/core/UserAgentTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) 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 9d0b7f6c2..9c0b7181b 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 @@ -101,4 +101,13 @@ public void testUserAgentCicdTwoProvider() { Assertions.assertTrue(UserAgent.asString().contains("cicd/gitlab")); UserAgent.env = null; } + + @Test + public void testEnvNoPath() { + // Fix NullPointerException when System.getenv() returns null or missing PATH property + UserAgent.env = null; + Environment environment = UserAgent.env(); + Assertions.assertNotNull(environment); + UserAgent.env = null; + } } From 45b9f783eb5773427546206ac659794aab90cfeb Mon Sep 17 00:00:00 2001 From: Jon Hopper Date: Mon, 26 Jan 2026 15:09:58 +1300 Subject: [PATCH 3/3] Update CHANGELOG to reflect fix for NullPointerException in UserAgent.env() --- NEXT_CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index 44a5be6a8..6fd9c2379 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -5,6 +5,7 @@ ### New Features and Improvements ### Bug Fixes + * `UserAgent.env()` no longer throws `NullPointerException` when `PATH` variable is not found ### Security Vulnerabilities