Skip to content

Commit 1d964c6

Browse files
committed
Fix null dereference
1 parent 5949e92 commit 1d964c6

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

src/main/java/org/seasar/doma/internal/jdbc/scalar/Scalars.java

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,31 +85,50 @@ public final class Scalars {
8585
return createBasicScalarSupplier(supplier, optional);
8686
}
8787
if (valueClass == boolean.class) {
88-
Supplier<Wrapper<Boolean>> supplier = () -> new PrimitiveBooleanWrapper((boolean) value);
88+
Supplier<Wrapper<Boolean>> supplier =
89+
() ->
90+
value == null
91+
? new PrimitiveBooleanWrapper()
92+
: new PrimitiveBooleanWrapper((boolean) value);
8993
return createBasicScalarSupplier(supplier, optional);
9094
}
9195
if (valueClass == byte.class) {
92-
Supplier<Wrapper<Byte>> supplier = () -> new PrimitiveByteWrapper((byte) value);
96+
Supplier<Wrapper<Byte>> supplier =
97+
() -> value == null ? new PrimitiveByteWrapper() : new PrimitiveByteWrapper((byte) value);
9398
return createBasicScalarSupplier(supplier, optional);
9499
}
95100
if (valueClass == double.class) {
96-
Supplier<Wrapper<Double>> supplier = () -> new PrimitiveDoubleWrapper((double) value);
101+
Supplier<Wrapper<Double>> supplier =
102+
() ->
103+
value == null
104+
? new PrimitiveDoubleWrapper()
105+
: new PrimitiveDoubleWrapper((double) value);
97106
return createBasicScalarSupplier(supplier, optional);
98107
}
99108
if (valueClass == float.class) {
100-
Supplier<Wrapper<Float>> supplier = () -> new PrimitiveFloatWrapper((float) value);
109+
Supplier<Wrapper<Float>> supplier =
110+
() ->
111+
value == null
112+
? new PrimitiveFloatWrapper()
113+
: new PrimitiveFloatWrapper((float) value);
101114
return createBasicScalarSupplier(supplier, optional);
102115
}
103116
if (valueClass == int.class) {
104-
Supplier<Wrapper<Integer>> supplier = () -> new PrimitiveIntWrapper((int) value);
117+
Supplier<Wrapper<Integer>> supplier =
118+
() -> value == null ? new PrimitiveIntWrapper() : new PrimitiveIntWrapper((int) value);
105119
return createBasicScalarSupplier(supplier, optional);
106120
}
107121
if (valueClass == long.class) {
108-
Supplier<Wrapper<Long>> supplier = () -> new PrimitiveLongWrapper((long) value);
122+
Supplier<Wrapper<Long>> supplier =
123+
() -> value == null ? new PrimitiveLongWrapper() : new PrimitiveLongWrapper((long) value);
109124
return createBasicScalarSupplier(supplier, optional);
110125
}
111126
if (valueClass == short.class) {
112-
Supplier<Wrapper<Short>> supplier = () -> new PrimitiveShortWrapper((short) value);
127+
Supplier<Wrapper<Short>> supplier =
128+
() ->
129+
value == null
130+
? new PrimitiveShortWrapper()
131+
: new PrimitiveShortWrapper((short) value);
113132
return createBasicScalarSupplier(supplier, optional);
114133
}
115134
if (valueClass == Integer.class) {

src/test/java/org/seasar/doma/internal/jdbc/scalar/ScalarsTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,19 @@ public void testWrapBasic_primitiveType() throws Exception {
8484
assertEquals(10, wrapper.get());
8585
}
8686

87+
@Test
88+
public void testWrapBasic_primitiveType_null() throws Exception {
89+
Supplier<Scalar<?, ?>> supplier = Scalars.wrap(null, int.class, false, classHelper);
90+
assertNotNull(supplier);
91+
92+
Scalar<?, ?> scalar = supplier.get();
93+
assertEquals(0, scalar.get());
94+
95+
Wrapper<?> wrapper = scalar.getWrapper();
96+
assertEquals(PrimitiveIntWrapper.class, wrapper.getClass());
97+
assertEquals(0, wrapper.get());
98+
}
99+
87100
@Test
88101
public void testWrapBasic_null() throws Exception {
89102
Supplier<Scalar<?, ?>> supplier = Scalars.wrap(null, Integer.class, false, classHelper);

0 commit comments

Comments
 (0)