From 98ae92a0bf0a3664665a340c457be341672d5cbf Mon Sep 17 00:00:00 2001 From: Ayushman Gaur Date: Fri, 6 Mar 2026 11:32:09 +0530 Subject: [PATCH 1/5] 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 6fb1869ad..ae9140c1e 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 @@ -274,7 +274,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 45a1b1408..15cb5cbb5 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; @@ -127,4 +128,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 46ec0cd43da54ab0d5a67dfef3019bf3384632de Mon Sep 17 00:00:00 2001 From: Ayushman Gaur Date: Fri, 6 Mar 2026 11:45:55 +0530 Subject: [PATCH 2/5] 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 ae9140c1e..4d12c3bf4 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 @@ -274,7 +274,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 eca06c0f66d9aeea52daf5f9f4e7a6821f9dd2f2 Mon Sep 17 00:00:00 2001 From: Ayushman Gaur Date: Fri, 6 Mar 2026 20:31:58 +0530 Subject: [PATCH 3/5] 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 4d12c3bf4..bcf320637 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 @@ -270,8 +270,11 @@ private ProviderEvaluation resolve(Class type, String key, T defaultVa 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 5984d149c2c831bc03510633117ad981d576d104 Mon Sep 17 00:00:00 2001 From: Ayushman Gaur Date: Tue, 10 Mar 2026 10:39:45 +0530 Subject: [PATCH 4/5] 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 15cb5cbb5..5000087a0 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 @@ -144,7 +144,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(); }); } From e2dfb363d8b68a9bd54306ec7bf2284356da6bbd Mon Sep 17 00:00:00 2001 From: Todd Baert Date: Tue, 21 Apr 2026 11:04:02 -0400 Subject: [PATCH 5/5] fixup: add missing default value arg in test Signed-off-by: Todd Baert --- .../dev/openfeature/contrib/tools/flagd/core/FlagdCoreTest.java | 2 +- 1 file changed, 1 insertion(+), 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 5000087a0..1d7b73294 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 @@ -145,7 +145,7 @@ void resolveBooleanValue_flagWithNullMetadata_doesNotThrowNPE() { assertThatNoException().isThrownBy(() -> { flagdCore.setFlags(configWithNullMetadata); ProviderEvaluation result = - flagdCore.resolveBooleanValue("nullMetadataFlag", new ImmutableContext()); + flagdCore.resolveBooleanValue("nullMetadataFlag", false, new ImmutableContext()); assertThat(result.getFlagMetadata()).isNotNull(); }); }