vinoyang created FLINK-9694:
-------------------------------
Summary: potentially NPE in CompositeTypeSerializerConfigSnapshot
constructor
Key: FLINK-9694
URL: https://issues.apache.org/jira/browse/FLINK-9694
Project: Flink
Issue Type: Bug
Components: Table API & SQL
Affects Versions: 1.5.0
Reporter: vinoyang
Assignee: vinoyang
the partial specific exception stack trace :
{code:java}
Caused by: java.lang.NullPointerException
at
org.apache.flink.api.common.typeutils.CompositeTypeSerializerConfigSnapshot.<init>(CompositeTypeSerializerConfigSnapshot.java:53)
at
org.apache.flink.table.runtime.types.CRowSerializer$CRowSerializerConfigSnapshot.<init>(CRowSerializer.scala:120)
at
org.apache.flink.table.runtime.types.CRowSerializer$CRowSerializerConfigSnapshot.<init>(CRowSerializer.scala:123)
at sun.reflect.GeneratedConstructorAccessor10.newInstance(Unknown Source)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at
org.apache.flink.util.InstantiationUtil.instantiate(InstantiationUtil.java:319)
... 20 more{code}
related code is :
{code:java}
public CompositeTypeSerializerConfigSnapshot(TypeSerializer<?>...
nestedSerializers) {
Preconditions.checkNotNull(nestedSerializers);
this.nestedSerializersAndConfigs = new ArrayList<>(nestedSerializers.length);
for (TypeSerializer<?> nestedSerializer : nestedSerializers) {
TypeSerializerConfigSnapshot configSnapshot =
nestedSerializer.snapshotConfiguration();
this.nestedSerializersAndConfigs.add(
new Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot>(
nestedSerializer.duplicate(),
Preconditions.checkNotNull(configSnapshot)));
}
}
{code}
exception happens at :
{code:java}
TypeSerializerConfigSnapshot configSnapshot =
nestedSerializer.snapshotConfiguration();
{code}
the reason is the type of constructor's parameter "..." used "varargs" feature.
The initialize code in *CRowSerializer.scala* is :
{code:java}
def this() = this(null) // Scala code
{code}
when invoked this, actually the the type of
CompositeTypeSerializerConfigSnapshot's
nestedSerializers parameter is :
{code:java}
TypeSerializer<?>[] nestedSerializers = new TypeSerializer<?>[] {null};
{code}
so the checkNotNull precondition statement :
{code:java}
Preconditions.checkNotNull(nestedSerializers);
{code}
is always useless.
So we should check the object reference in _for_ loop to protect NPE.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)