[Bug] FileIndexFormat.Reader leaks input stream when construction fails with a runtime exception
- 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