Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Smile: invalid UTF-8 sequences (overlong, surrogates, > U+10FFFF, bad continuation bytes) not rejected in text

Abierto
#861 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
java
Área
backend

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

smile

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 points
  • SmileConstants.sUtf8UnitLengths maps 0xC0/0xC1 and 0xF5-0xF7 to 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 as Invalid 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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de FasterXML/jackson-dataformats-binary

Todos los issues de FasterXML/jackson-dataformats-binary

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.