diff --git a/.changes/next-release/bugfix-AmazonDynamoDBEnhancedClient-192189d.json b/.changes/next-release/bugfix-AmazonDynamoDBEnhancedClient-192189d.json new file mode 100644 index 00000000000..549092a8a4a --- /dev/null +++ b/.changes/next-release/bugfix-AmazonDynamoDBEnhancedClient-192189d.json @@ -0,0 +1,6 @@ +{ + "type": "bugfix", + "category": "Amazon DynamoDB Enhanced Client", + "contributor": "", + "description": "Fix NullPointerException in `DoubleAttributeConverter` and `FloatAttributeConverter` when input is null. Fixes [#6639](https://github.com/aws/aws-sdk-java-v2/issues/6639)." +} diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/ConverterUtils.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/ConverterUtils.java index 0f6f2058318..303a3c70313 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/ConverterUtils.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/ConverterUtils.java @@ -39,6 +39,7 @@ private ConverterUtils() { * @param input */ public static void validateDouble(Double input) { + Validate.paramNotNull(input, "input"); Validate.isTrue(!Double.isNaN(input), "NaN is not supported by the default converters."); Validate.isTrue(Double.isFinite(input), "Infinite numbers are not supported by the default converters."); } @@ -48,6 +49,7 @@ public static void validateDouble(Double input) { * @param input */ public static void validateFloat(Float input) { + Validate.paramNotNull(input, "input"); Validate.isTrue(!Float.isNaN(input), "NaN is not supported by the default converters."); Validate.isTrue(Float.isFinite(input), "Infinite numbers are not supported by the default converters."); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/NumberAttributeConvertersTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/NumberAttributeConvertersTest.java index bfbbf0ca608..172db359120 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/NumberAttributeConvertersTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/NumberAttributeConvertersTest.java @@ -16,6 +16,7 @@ package software.amazon.awssdk.enhanced.dynamodb.converters.attribute; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.data.Offset.offset; import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.assertFails; import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.transformFrom; @@ -150,6 +151,9 @@ public void floatAttributeConverterBehaves() { assertFails(() -> transformFrom(converter, Float.NEGATIVE_INFINITY)); assertFails(() -> transformFrom(converter, Float.POSITIVE_INFINITY)); assertFails(() -> transformFrom(converter, Float.NaN)); + assertThatThrownBy(() -> transformFrom(converter, null)) + .isInstanceOf(NullPointerException.class) + .hasMessageContaining("input must not be null"); assertThat(transformFrom(converter, -Float.MAX_VALUE).n()).isEqualTo("-3.4028235E38"); assertThat(Float.parseFloat(transformFrom(converter, -42.42f).n())).isCloseTo(-42.42f, offset(1E-10f)); @@ -179,6 +183,9 @@ public void doubleAttributeConverterBehaves() { assertFails(() -> transformFrom(converter, Double.NEGATIVE_INFINITY)); assertFails(() -> transformFrom(converter, Double.POSITIVE_INFINITY)); assertFails(() -> transformFrom(converter, Double.NaN)); + assertThatThrownBy(() -> transformFrom(converter, null)) + .isInstanceOf(NullPointerException.class) + .hasMessageContaining("input must not be null"); assertThat(transformFrom(converter, -Double.MAX_VALUE).n()).isEqualTo("-1.7976931348623157E308"); assertThat(Double.parseDouble(transformFrom(converter, -42.42d).n())).isCloseTo(-42.42d, offset(1E-10));