From 3abbfbc3bbf8d53cc8a62775b43d3776105dc0f6 Mon Sep 17 00:00:00 2001 From: Ayushman Gaur Date: Fri, 6 Mar 2026 11:32:09 +0530 Subject: [PATCH 1/4] fixing null pointer exception error Signed-off-by: Ayushman Gaur --- .../contrib/tools/flagd/core/FlagdCore.java | 2 +- .../tools/flagd/core/FlagdCoreTest.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java b/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java index 85d494ad4..020bdb1af 100644 --- a/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java +++ b/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java @@ -273,7 +273,7 @@ private static ImmutableMetadata getFlagMetadata(Map currentFlag addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue()); } - if (flag != null) { + if (flag != null && flag.getTargeting() != null) { for (Map.Entry entry : flag.getMetadata().entrySet()) { addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue()); } diff --git a/tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java b/tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java index c6994838d..1ec14e341 100644 --- a/tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java +++ b/tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java @@ -1,6 +1,7 @@ package dev.openfeature.contrib.tools.flagd.core; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatNoException; import dev.openfeature.contrib.tools.flagd.api.FlagStoreException; import dev.openfeature.sdk.ImmutableContext; @@ -124,4 +125,24 @@ void setFlagsAndGetChangedKeys_detectsRemovedFlags() throws FlagStoreException { // Then: boolFlag should be in the changed keys (it was removed) assertThat(changedKeys).contains("boolFlag"); } + + @Test + void resolveBooleanValue_flagWithNullMetadata_doesNotThrowNPE() { + String configWithNullMetadata = "{" + + "\"$schema\": \"https://flagd.dev/schema/v0/flags.json\"," + + "\"flags\": {" + + " \"nullMetadataFlag\": {" + + " \"state\": \"ENABLED\"," + + " \"defaultVariant\": \"on\"," + + " \"variants\": { \"on\": true }" + + " }" + + "}" + + "}"; + + assertThatNoException().isThrownBy(() -> { + flagdCore.setFlags(configWithNullMetadata); + ProviderEvaluation result = flagdCore.resolveBooleanValue("nullMetadataFlag", new ImmutableContext()); + assertThat(result.getFlagMetadata()).isNotNull(); + }); + } } From bd86aadc94c3845afe9e61fa6e13785fe9eff569 Mon Sep 17 00:00:00 2001 From: Ayushman Gaur Date: Fri, 6 Mar 2026 11:45:55 +0530 Subject: [PATCH 2/4] fix: update null check handling Signed-off-by: Ayushman Gaur --- .../dev/openfeature/contrib/tools/flagd/core/FlagdCore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java b/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java index 020bdb1af..deabb326f 100644 --- a/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java +++ b/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java @@ -273,7 +273,7 @@ private static ImmutableMetadata getFlagMetadata(Map currentFlag addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue()); } - if (flag != null && flag.getTargeting() != null) { + if (flag != null && flag.getMetadata() != null) { for (Map.Entry entry : flag.getMetadata().entrySet()) { addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue()); } From c32e83814c2550f5a95af8f5c4bc5c78b21f9f0d Mon Sep 17 00:00:00 2001 From: Ayushman Gaur Date: Fri, 6 Mar 2026 20:31:58 +0530 Subject: [PATCH 3/4] Fix null error Signed-off-by: Ayushman Gaur --- .../openfeature/contrib/tools/flagd/core/FlagdCore.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java b/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java index deabb326f..db8c010b4 100644 --- a/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java +++ b/tools/flagd-core/src/main/java/dev/openfeature/contrib/tools/flagd/core/FlagdCore.java @@ -269,8 +269,11 @@ private ProviderEvaluation resolve(Class type, String key, EvaluationC private static ImmutableMetadata getFlagMetadata(Map currentFlagSetMetadata, FeatureFlag flag) { ImmutableMetadata.ImmutableMetadataBuilder metadataBuilder = ImmutableMetadata.builder(); - for (Map.Entry entry : currentFlagSetMetadata.entrySet()) { - addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue()); + + if (currentFlagSetMetadata != null) { + for (Map.Entry entry : currentFlagSetMetadata.entrySet()) { + addEntryToMetadataBuilder(metadataBuilder, entry.getKey(), entry.getValue()); + } } if (flag != null && flag.getMetadata() != null) { From fbbb12338d452bf27a400627d9aeb7c3423a7f57 Mon Sep 17 00:00:00 2001 From: Ayushman Gaur Date: Tue, 10 Mar 2026 10:39:45 +0530 Subject: [PATCH 4/4] fix: apply spotless formatting Signed-off-by: Ayushman Gaur --- .../openfeature/contrib/tools/flagd/core/FlagdCoreTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java b/tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java index 1ec14e341..7feb16e39 100644 --- a/tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java +++ b/tools/flagd-core/src/test/java/dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java @@ -141,7 +141,8 @@ void resolveBooleanValue_flagWithNullMetadata_doesNotThrowNPE() { assertThatNoException().isThrownBy(() -> { flagdCore.setFlags(configWithNullMetadata); - ProviderEvaluation result = flagdCore.resolveBooleanValue("nullMetadataFlag", new ImmutableContext()); + ProviderEvaluation result = + flagdCore.resolveBooleanValue("nullMetadataFlag", new ImmutableContext()); assertThat(result.getFlagMetadata()).isNotNull(); }); }