Skip to content

Commit 20eed83

Browse files
committed
Add null validation in ConverterUtils.validateDouble/validateFloat to replace auto-unboxing NPE
1 parent 9a1f1e8 commit 20eed83

4 files changed

Lines changed: 9 additions & 12 deletions

File tree

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/ConverterUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ private ConverterUtils() {
3939
* @param input
4040
*/
4141
public static void validateDouble(Double input) {
42+
Validate.paramNotNull(input, "input");
4243
Validate.isTrue(!Double.isNaN(input), "NaN is not supported by the default converters.");
4344
Validate.isTrue(Double.isFinite(input), "Infinite numbers are not supported by the default converters.");
4445
}
@@ -48,6 +49,7 @@ public static void validateDouble(Double input) {
4849
* @param input
4950
*/
5051
public static void validateFloat(Float input) {
52+
Validate.paramNotNull(input, "input");
5153
Validate.isTrue(!Float.isNaN(input), "NaN is not supported by the default converters.");
5254
Validate.isTrue(Float.isFinite(input), "Infinite numbers are not supported by the default converters.");
5355
}

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/DoubleAttributeConverter.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import software.amazon.awssdk.enhanced.dynamodb.AttributeConverter;
2222
import software.amazon.awssdk.enhanced.dynamodb.AttributeValueType;
2323
import software.amazon.awssdk.enhanced.dynamodb.EnhancedType;
24-
import software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues;
2524
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.ConverterUtils;
2625
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.PrimitiveConverter;
2726
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.TypeConvertingVisitor;
@@ -72,9 +71,6 @@ public AttributeValueType attributeValueType() {
7271

7372
@Override
7473
public AttributeValue transformFrom(Double input) {
75-
if (input == null) {
76-
return AttributeValues.nullAttributeValue();
77-
}
7874
ConverterUtils.validateDouble(input);
7975
return AttributeValue.builder().n(STRING_CONVERTER.toString(input)).build();
8076
}

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/FloatAttributeConverter.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import software.amazon.awssdk.enhanced.dynamodb.AttributeConverter;
2222
import software.amazon.awssdk.enhanced.dynamodb.AttributeValueType;
2323
import software.amazon.awssdk.enhanced.dynamodb.EnhancedType;
24-
import software.amazon.awssdk.enhanced.dynamodb.internal.AttributeValues;
2524
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.ConverterUtils;
2625
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.PrimitiveConverter;
2726
import software.amazon.awssdk.enhanced.dynamodb.internal.converter.TypeConvertingVisitor;
@@ -72,9 +71,6 @@ public AttributeValueType attributeValueType() {
7271

7372
@Override
7473
public AttributeValue transformFrom(Float input) {
75-
if (input == null) {
76-
return AttributeValues.nullAttributeValue();
77-
}
7874
ConverterUtils.validateFloat(input);
7975
return AttributeValue.builder().n(STRING_CONVERTER.toString(input)).build();
8076
}

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/NumberAttributeConvertersTest.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package software.amazon.awssdk.enhanced.dynamodb.converters.attribute;
1717

1818
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1920
import static org.assertj.core.data.Offset.offset;
2021
import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.assertFails;
2122
import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.transformFrom;
@@ -150,8 +151,9 @@ public void floatAttributeConverterBehaves() {
150151
assertFails(() -> transformFrom(converter, Float.NEGATIVE_INFINITY));
151152
assertFails(() -> transformFrom(converter, Float.POSITIVE_INFINITY));
152153
assertFails(() -> transformFrom(converter, Float.NaN));
153-
154-
assertThat(transformFrom(converter, null).nul()).isTrue();
154+
assertThatThrownBy(() -> transformFrom(converter, null))
155+
.isInstanceOf(NullPointerException.class)
156+
.hasMessageContaining("input must not be null");
155157

156158
assertThat(transformFrom(converter, -Float.MAX_VALUE).n()).isEqualTo("-3.4028235E38");
157159
assertThat(Float.parseFloat(transformFrom(converter, -42.42f).n())).isCloseTo(-42.42f, offset(1E-10f));
@@ -181,8 +183,9 @@ public void doubleAttributeConverterBehaves() {
181183
assertFails(() -> transformFrom(converter, Double.NEGATIVE_INFINITY));
182184
assertFails(() -> transformFrom(converter, Double.POSITIVE_INFINITY));
183185
assertFails(() -> transformFrom(converter, Double.NaN));
184-
185-
assertThat(transformFrom(converter, null).nul()).isTrue();
186+
assertThatThrownBy(() -> transformFrom(converter, null))
187+
.isInstanceOf(NullPointerException.class)
188+
.hasMessageContaining("input must not be null");
186189

187190
assertThat(transformFrom(converter, -Double.MAX_VALUE).n()).isEqualTo("-1.7976931348623157E308");
188191
assertThat(Double.parseDouble(transformFrom(converter, -42.42d).n())).isCloseTo(-42.42d, offset(1E-10));

0 commit comments

Comments
 (0)