From 407d7feeadb1a2efbf6f02902f950154036771c7 Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Wed, 31 Aug 2016 18:24:12 +0200 Subject: [PATCH] SONAR-8004 WS settings/set fails when property set field with a null value --- .../sonar/server/setting/ws/SetAction.java | 5 +++- .../server/setting/ws/SetActionTest.java | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/setting/ws/SetAction.java b/server/sonar-server/src/main/java/org/sonar/server/setting/ws/SetAction.java index 340bbec2964..51a46449337 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/setting/ws/SetAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/setting/ws/SetAction.java @@ -216,7 +216,10 @@ public class SetAction implements SettingsWsAction { .map(oneFieldValues -> readOneFieldValues(oneFieldValues, request.getKey())) .flatMap(map -> map.entrySet().stream()) .peek(entry -> valuesByFieldKeys.put(entry.getKey(), entry.getValue())) - .forEach(entry -> checkRequest(fieldKeys.contains(entry.getKey()), "Unknown field key '%s' for setting '%s'", entry.getKey(), request.getKey())); + .forEach(entry -> { + checkRequest(fieldKeys.contains(entry.getKey()), "Unknown field key '%s' for setting '%s'", entry.getKey(), request.getKey()); + checkRequest(entry.getValue() != null, "Parameter field '%s' must not be null", entry.getKey()); + }); checkFieldType(request, definition, valuesByFieldKeys); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/setting/ws/SetActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/setting/ws/SetActionTest.java index 857ee0bae17..ca8d5820e4e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/setting/ws/SetActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/setting/ws/SetActionTest.java @@ -544,6 +544,29 @@ public class SetActionTest { callForGlobalPropertySet("my.key", newArrayList(GSON.toJson(ImmutableMap.of("field", "notAnInt")))); } + @Test + public void fail_when_property_set_has_a_null_field_value() { + propertyDefinitions.addComponent(PropertyDefinition + .builder("my.key") + .name("foo") + .description("desc") + .category("cat") + .subCategory("subCat") + .type(PropertyType.PROPERTY_SET) + .defaultValue("default") + .fields(newArrayList( + PropertyFieldDefinition.build("field") + .name("Field") + .type(PropertyType.STRING) + .build())) + .build()); + + expectedException.expect(BadRequestException.class); + expectedException.expectMessage("Parameter field 'field' must not be null"); + + callForGlobalPropertySet("my.key", newArrayList("{\"field\": null}")); + } + @Test public void fail_when_property_set_with_invalid_json() { propertyDefinitions.addComponent(PropertyDefinition -- 2.39.5