From e379c8b8c09de73d1f098664283f8c38da58bc39 Mon Sep 17 00:00:00 2001 From: Eduard Tudenhoefner Date: Wed, 30 Nov 2022 11:22:28 +0100 Subject: [PATCH] Core: Fix NPE in CloseableIterable.close() --- .../java/org/apache/iceberg/io/CloseableIterable.java | 4 +++- .../java/org/apache/iceberg/io/TestCloseableIterable.java | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/iceberg/io/CloseableIterable.java b/api/src/main/java/org/apache/iceberg/io/CloseableIterable.java index 71e99aaeb468..06323612a178 100644 --- a/api/src/main/java/org/apache/iceberg/io/CloseableIterable.java +++ b/api/src/main/java/org/apache/iceberg/io/CloseableIterable.java @@ -279,7 +279,9 @@ public boolean hasNext() { @Override public void close() throws IOException { if (!closed) { - currentIterable.close(); + if (null != currentIterable) { + currentIterable.close(); + } this.closed = true; this.currentIterator = null; this.currentIterable = null; diff --git a/api/src/test/java/org/apache/iceberg/io/TestCloseableIterable.java b/api/src/test/java/org/apache/iceberg/io/TestCloseableIterable.java index df4edb035861..0c001c53180b 100644 --- a/api/src/test/java/org/apache/iceberg/io/TestCloseableIterable.java +++ b/api/src/test/java/org/apache/iceberg/io/TestCloseableIterable.java @@ -201,6 +201,14 @@ public CloseableIterator iterator() { Assertions.assertThat(counter.get()).isEqualTo(items.size()); } + @Test + public void concatIterablesWithIterator() throws IOException { + CloseableIterable closeableIterable = CloseableIterable.concat(Collections.emptyList()); + closeableIterable.iterator(); + // shouldn't throw a NPE + closeableIterable.close(); + } + @Test public void count() { Counter counter = new DefaultMetricsContext().counter("x");