From 2e0ff419b31b471d86a2bf8cfc1850c308b2d776 Mon Sep 17 00:00:00 2001 From: Nico Piel Date: Mon, 25 May 2026 23:03:53 +0200 Subject: [PATCH] fix: guard null in GlobalVariableStore lock/unlock $gc()/$g() JS APIs call lock() on keys never registered via putSync(), causing NPE; throw IllegalArgumentException with clear message instead Signed-off-by: Nico Piel --- .../connect/server/util/GlobalVariableStore.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server/src/com/mirth/connect/server/util/GlobalVariableStore.java b/server/src/com/mirth/connect/server/util/GlobalVariableStore.java index 883d061bdf..ce89350156 100644 --- a/server/src/com/mirth/connect/server/util/GlobalVariableStore.java +++ b/server/src/com/mirth/connect/server/util/GlobalVariableStore.java @@ -69,11 +69,19 @@ public String toString() { // ##### SYNC METHODS ##### public void lock(String key) { - globalVariableSyncMap.get(key).getLock().lock(); + SyncObject obj = globalVariableSyncMap.get(key); + if (obj == null) { + throw new IllegalArgumentException("Sync key not found: " + key); + } + obj.getLock().lock(); } public void unlock(String key) { - globalVariableSyncMap.get(key).getLock().unlock(); + SyncObject obj = globalVariableSyncMap.get(key); + if (obj == null) { + throw new IllegalArgumentException("Sync key not found: " + key); + } + obj.getLock().unlock(); } public boolean containsKeySync(String key) {