esa / esa/mo-services-java

Binary decoder returns incorrect data after short stream reads

Offen
#56 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
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

Neue Issues direkt in Ihr Postfach

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