Skip to content

Commit 992ef0e

Browse files
committed
Handle nulls returned from async tx functions
Previously code failed with NPE when provided async transaction function returned null. This commit fixes the problem by wrapping null in a completed future.
1 parent f2f55c2 commit 992ef0e

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

driver/src/main/java/org/neo4j/driver/internal/NetworkSession.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,10 @@ private <T> CompletionStage<T> safeExecuteWork( ExplicitTransaction tx, Transact
360360
// sync failure will result in an exception being thrown
361361
try
362362
{
363-
return work.execute( tx );
363+
CompletionStage<T> result = work.execute( tx );
364+
365+
// protect from given transaction function returning null
366+
return result == null ? completedFuture( null ) : result;
364367
}
365368
catch ( Throwable workError )
366369
{

driver/src/test/java/org/neo4j/driver/v1/integration/SessionAsyncIT.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,16 @@ public void shouldAllowAccessingRecordsAfterSessionClosed()
11571157
}
11581158
}
11591159

1160+
@Test
1161+
public void shouldAllowReturningNullFromAsyncTransactionFunction()
1162+
{
1163+
CompletionStage<Object> readResult = session.readTransactionAsync( tx -> null );
1164+
assertNull( await( readResult ) );
1165+
1166+
CompletionStage<Object> writeResult = session.writeTransactionAsync( tx -> null );
1167+
assertNull( await( writeResult ) );
1168+
}
1169+
11601170
private Future<List<CompletionStage<Record>>> runNestedQueries( StatementResultCursor inputCursor )
11611171
{
11621172
CompletableFuture<List<CompletionStage<Record>>> resultFuture = new CompletableFuture<>();

driver/src/test/java/org/neo4j/driver/v1/integration/SessionIT.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,6 +1529,16 @@ public void shouldAllowLongRunningQueryWithConnectTimeout() throws Exception
15291529
}
15301530
}
15311531

1532+
@Test
1533+
public void shouldAllowReturningNullFromTransactionFunction()
1534+
{
1535+
try ( Session session = neo4j.driver().session() )
1536+
{
1537+
assertNull( session.readTransaction( tx -> null ) );
1538+
assertNull( session.writeTransaction( tx -> null ) );
1539+
}
1540+
}
1541+
15321542
private void assumeServerIs31OrLater()
15331543
{
15341544
ServerVersion serverVersion = ServerVersion.version( neo4j.driver() );

0 commit comments

Comments
 (0)