Binary decoder returns incorrect data after short stream reads
- Vorherrschende Sprache
- Java
- Sterne
- 17
- Forks
- 11
- Ø Merge
- 15 Min.
- Gemergte PRs (30 T.)
- 1
Beschreibung
On master `028751ad`, `BaseBinaryInputReader.checkBuffer()` performs only one stream read before allowing decoding. A valid short read leaves part of the requested value unfilled, so the decoder can silently return incorrect data.
```java
InputStream input = new ByteArrayInputStream(new byte[]{1, 35, 69, 103}) {
@Override
public synchronized int read(byte[] buffer, int offset, int length) {
return super.read(buffer, offset, Math.min(length, 1));
}
};
new FixedBinaryDecoder(input, null, false).decodeInteger();
```
Expected: `0x01234567` (19088743). Actual: `0x01000000` (16777216).
Strings and byte blocks also contain incorrect bytes after fragmented reads. With byte-array input, `checkBuffer()` does not verify the readable length, so `directGetBytes()` can silently pad truncated input with zeros or decode unused buffer capacity.
The reader should accumulate enough bytes before decoding and throw `MALException` when the stream or buffer cannot satisfy the requested length.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Beginnen Sie in BaseBinaryInputReader.checkBuffer() und reproduzieren Sie das Problem mit dem bereitgestellten FixedBinaryDecoder- und fragmentierten ByteArrayInputStream-Beispiel. Verfolgen Sie directGetBytes() für Byte-Array-Eingaben und die Behandlung von MALException. Als abgeschlossen gilt die Änderung, wenn fragmentierte Lesevorgänge die angeforderten Bytes ansammeln, unzureichende Streams oder Puffer MALException auslösen und Integer, Strings sowie Byte-Blöcke keine falschen oder aufgefüllten Daten mehr enthalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Aktiv
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 76/100