apache / apache/iotdb

[Bug] ResultSetMetaData.getCatalogName throws IndexOutOfBoundsException instead of SQLException for out-of-range columns

Đang mở Phù hợp với người mới
#18,241 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Java
Star
6.4k
Fork
1.2k
Merge trung bình
1 ngày 23 giờ
Pull request đã merge (30 ngày)
115

Mô tả

### Search before asking

- [x] I searched in the [issues](https://github.com/apache/iotdb/issues) and found nothing similar.

### Version

`master` (2.0.x). The affected code is also present in released 2.0.x versions.

### Describe the bug and provide the minimal reproduce step

`IoTDBResultMetadata.getCatalogName(int column)` reads `columnInfoList.get(column - 1)` before its range check runs, so an out-of-range column index throws a raw `IndexOutOfBoundsException` instead of the `SQLException` required by the `ResultSetMetaData` contract. The subsequent range check (`if (column < 1 || column > columnInfoList.size())`) is therefore unreachable for an out-of-range column. The seven sibling `ResultSetMetaData` accessors in the same class all call `checkColumnIndex(column)` first; `getCatalogName` is the only one missing that guard.

Minimal reproduce step:

1. Obtain a `ResultSetMetaData` from any (non-empty) query result.
2. Call `metaData.getCatalogName(0)` (or any column index `<= 0` or `> column count`).
3. A raw `IndexOutOfBoundsException` is thrown instead of a `SQLException`.

### What did you expect to see?

`getCatalogName` throws a `SQLException` for an out-of-range column index, consistent with the `ResultSetMetaData` contract and with the sibling accessors.

### What did you see instead?

A raw `java.lang.IndexOutOfBoundsException` from `columnInfoList.get(column - 1)`.

### Anything else?

The fix is to call `checkColumnIndex(column)` first, as the sibling accessors already do — it throws `SQLException` on `column <= 0`, `column > size`, and an empty column list. I'd like to work on this and will open a PR.

### Are you willing to submit a PR?

- [x] I'm willing to submit a PR!

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu trong class chứa IoTDBResultMetadata.getCatalogName(int) và so sánh nó với bảy accessor cùng nhóm của ResultSetMetaData gọi checkColumnIndex(column) trước tiên. Tái hiện vấn đề bằng getCatalogName(0) hoặc một cột khác nằm ngoài phạm vi, sau đó xác minh rằng các index không hợp lệ luôn tạo ra SQLException thay vì IndexOutOfBoundsException.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
java
Lĩnh vực
databases
Loại issue
Lỗi
Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
78/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.