apache / apache/paimon

[Bug] FileIndexFormat.Reader leaks input stream when construction fails with a runtime exception

Open Beginner friendly
#8,765 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
3.4k
Forks
1.4k
Avg merge
1d 11h
Merged PRs (30d)
396

Description

**Search before asking**
- [x] I searched in the [issues](https://github.com/apache/paimon/issues) and found nothing similar.

**Paimon version**
master @ 345526e26

**Compute Engine**
Engine-agnostic (core)

**Minimal reproduce step**
Call `FileIndexFormat.createReader(seekableInputStream, rowType)` on a corrupt or wrong-version index file. `FileIndexFormat.Reader.` (paimon-common `FileIndexFormat.java` lines 248-261) throws a `RuntimeException` from the magic check ("This file is not file index file.") or the version check, both inside the constructor's `try` block. The only `catch (IOException e)` (line 282) closes the owned stream, but a `RuntimeException` escapes it uncaught.

**What doesn't meet your expectations?**
Because the constructor throws before returning, the caller's try-with-resources never binds the `Reader`, so its `close()` never runs and the `SeekableInputStream` (a real file descriptor) leaks. The IOException path already closes it.

**Anything else?**
Fix: widen the catch to `IOException | RuntimeException` so the stream is closed on both failure paths, mirroring the existing IOException branch.

**Are you willing to submit a PR?**
- [x] I'm willing to submit a PR!

Contributor guide

No contributing guide indexed for this repository

Research direction

Start at FileIndexFormat.createReader and read FileIndexFormat.java lines 248-261 and 282, focusing on Reader construction and the existing IOException cleanup path. Reproduce with a corrupt or wrong-version index file, then verify that construction-time RuntimeException failures also close the owned SeekableInputStream while the existing IOException behavior remains intact.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
data-engineering
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
85/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.