Smile: invalid UTF-8 sequences (overlong, surrogates, > U+10FFFF, bad continuation bytes) not rejected in text
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 55/100
Línea de trabajo
Start with the listed UTF-8 decoders in SmileParser and NonBlockingByteArrayParser, then check SmileConstants.sUtf8UnitLengths and the related tests for blocking, non-blocking, short, long, value, and name paths. Verify rejection of the invalid sequences described in the issue, including split input and continuation-byte errors; done when all affected paths reject them and error offsets and byte values are reported correctly.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
SmileParser and NonBlockingByteArrayParser accept several invalid UTF-8 sequences in Unicode String values and property names and decode them into characters. RFC 3629 makes these sequences invalid.
Same class of bug as FasterXML/jackson-core#1782 and FasterXML/jackson-dataformats-text#763.
Reproduced on 2.x, with a "tiny Unicode" value: header, 0x80 + (len - 2), 'a' + sequence + 'b'.
byte[] doc = {':', ')', '\n', 0x00, (byte) 0x82, 'a', (byte) 0xC0, (byte) 0xAF, 'b'};
JsonParser p = new SmileFactory().createParser(doc);
p.nextToken();
p.getText(); // -> "a/b"
| Bytes | Result |
|---|---|
C0 AF, E0 80 AF (overlong) |
/ |
F0 80 80 AF (overlong 4-byte) |
\uDC2F |
ED A0 80 (encoded surrogate) |
lone \uD800 |
F4 90 80 80 (above U+10FFFF) |
\uDC00\uDC00 |
F5 80 80 80 (lead byte F5-F7) |
\uDCC0\uDC00 |
C3 41, E2 41 41, F0 41 41 41 (missing continuation bytes) |
Á, ⁁, ᅣ\uDC41 |
The first five rows apply to every path: blocking and non-blocking parsers, short and long values, short and long names.
The missing-continuation rows apply to the short ("tiny"/"short" Unicode) value and name paths in both parsers. The non-blocking parser also accepts them in medium-length (~100 byte) names. The long value paths reject them.
Affected code:
SmileParser:_decodeShortUnicodeValue(),_decodeShortUnicodeName(),_decodeLongUnicodeName(), the long-Unicode text decoders and_decodeUtf8_3()/_decodeUtf8_4()NonBlockingByteArrayParser:_decodeUTF8_2()/_3()/_4(), the short Unicode value/name decoders and the split-input path for partially read code pointsSmileConstants.sUtf8UnitLengthsmaps0xC0/0xC1and0xF5-0xF7to valid lengths
Suggested fix: after decoding, check minimum values of 0x80, 0x800 and 0x10000 for 2-, 3- and 4-byte sequences, a maximum of 0x10FFFF, and reject 0xD800-0xDFFF. Also check continuation bytes in the short decoders.
Smaller issues in error messages:
- for an invalid lead byte in a short value, the reported byte offset is the end of the string, not the bad byte
_decodeLongUnicodeName()passes the unmasked byte to_reportInvalidOther(), so the message shows a sign-extended value such asInvalid UTF-8 middle byte 0xffffc341
- Lenguaje dominante
- Java
- Estrellas
- 348
- Forks
- 159
- Merge medio
- 22 h 34 min
- PR fusionados (30 d)
- 39
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de FasterXML/jackson-dataformats-binary
-
smile
Dificultad 3/5 1-2 días Aptitud para principiantes 71/100
FasterXML/jackson-dataformats-binary#869 ·
Los mantenedores suelen responder en 1 día
-
cbor
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
FasterXML/jackson-dataformats-binary#868 ·
Los mantenedores suelen responder en 1 día
-
protobuf
Dificultad 4/5 3-5 días Aptitud para principiantes 56/100
FasterXML/jackson-dataformats-binary#863 ·
Los mantenedores suelen responder en 1 día
-
avro
Dificultad 4/5 3-5 días Aptitud para principiantes 57/100
FasterXML/jackson-dataformats-binary#862 ·
Los mantenedores suelen responder en 1 día
-
cbor
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
FasterXML/jackson-dataformats-binary#860 ·
Los mantenedores suelen responder en 1 día
Todos los issues de FasterXML/jackson-dataformats-binary
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
AllTheMods/AllTheModium#238 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
apache/stormcrawler#2264 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
commons-app/apps-android-commons#7115 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
objectionary/lints#1596 ·
Los mantenedores suelen responder en 2 días