apache / apache/iotdb

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

Offen Anfängerfreundlich
#18,241 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Java
Sterne
6.4k
Forks
1.2k
Ø Merge
1 T. 23 Std.
Gemergte PRs (30 T.)
115

Beschreibung

### 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!

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginnen Sie in der Klasse, die IoTDBResultMetadata.getCatalogName(int) enthält, und vergleichen Sie sie mit den sieben benachbarten ResultSetMetaData-Zugriffsmethoden, die zuerst checkColumnIndex(column) aufrufen. Reproduzieren Sie das Problem mit getCatalogName(0) oder einer anderen Spalte außerhalb des gültigen Bereichs und überprüfen Sie anschließend, dass ungültige Indizes konsistent SQLException statt IndexOutOfBoundsException erzeugen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
databases
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Ruhig
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
78/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.