Skip to content

Commit 053d3ec

Browse files
committed
HHH-15993: NullPointerException from DatabaseMetaData validation
Check for possible null values from metaData.getTypeInfo()
1 parent d7c6c6a commit 053d3ec

File tree

1 file changed

+29
-27
lines changed
  • hibernate-core/src/main/java/org/hibernate/engine/jdbc/spi

1 file changed

+29
-27
lines changed

hibernate-core/src/main/java/org/hibernate/engine/jdbc/spi/TypeInfo.java

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -86,36 +86,38 @@ public static LinkedHashSet<TypeInfo> extractTypeInfo(DatabaseMetaData metaData)
8686
final LinkedHashSet<TypeInfo> typeInfoSet = new LinkedHashSet<>();
8787
try {
8888
final ResultSet resultSet = metaData.getTypeInfo();
89-
try {
90-
while ( resultSet.next() ) {
91-
typeInfoSet.add(
92-
new TypeInfo(
93-
resultSet.getString( "TYPE_NAME" ),
94-
resultSet.getInt( "DATA_TYPE" ),
95-
interpretCreateParams( resultSet.getString( "CREATE_PARAMS" ) ),
96-
resultSet.getBoolean( "UNSIGNED_ATTRIBUTE" ),
97-
resultSet.getInt( "PRECISION" ),
98-
resultSet.getShort( "MINIMUM_SCALE" ),
99-
resultSet.getShort( "MAXIMUM_SCALE" ),
100-
resultSet.getBoolean( "FIXED_PREC_SCALE" ),
101-
resultSet.getString( "LITERAL_PREFIX" ),
102-
resultSet.getString( "LITERAL_SUFFIX" ),
103-
resultSet.getBoolean( "CASE_SENSITIVE" ),
104-
TypeSearchability.interpret( resultSet.getShort( "SEARCHABLE" ) ),
105-
TypeNullability.interpret( resultSet.getShort( "NULLABLE" ) )
106-
)
107-
);
108-
}
109-
}
110-
catch ( SQLException e ) {
111-
LOG.unableToAccessTypeInfoResultSet( e.toString() );
112-
}
113-
finally {
89+
if (resultSet != null) {
11490
try {
115-
resultSet.close();
91+
while ( resultSet.next() ) {
92+
typeInfoSet.add(
93+
new TypeInfo(
94+
resultSet.getString( "TYPE_NAME" ),
95+
resultSet.getInt( "DATA_TYPE" ),
96+
interpretCreateParams( resultSet.getString( "CREATE_PARAMS" ) ),
97+
resultSet.getBoolean( "UNSIGNED_ATTRIBUTE" ),
98+
resultSet.getInt( "PRECISION" ),
99+
resultSet.getShort( "MINIMUM_SCALE" ),
100+
resultSet.getShort( "MAXIMUM_SCALE" ),
101+
resultSet.getBoolean( "FIXED_PREC_SCALE" ),
102+
resultSet.getString( "LITERAL_PREFIX" ),
103+
resultSet.getString( "LITERAL_SUFFIX" ),
104+
resultSet.getBoolean( "CASE_SENSITIVE" ),
105+
TypeSearchability.interpret( resultSet.getShort( "SEARCHABLE" ) ),
106+
TypeNullability.interpret( resultSet.getShort( "NULLABLE" ) )
107+
)
108+
);
109+
}
116110
}
117111
catch ( SQLException e ) {
118-
LOG.unableToReleaseTypeInfoResultSet();
112+
LOG.unableToAccessTypeInfoResultSet( e.toString() );
113+
}
114+
finally {
115+
try {
116+
resultSet.close();
117+
}
118+
catch ( SQLException e ) {
119+
LOG.unableToReleaseTypeInfoResultSet();
120+
}
119121
}
120122
}
121123
}

0 commit comments

Comments
 (0)