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

cssparser-color: debug assertion in hsl_to_rgb for a hue that overflows f32

Abierto Apto para principiantes
#460 0 comentarios 0 reacciones 0 asignados Ver en GitHub

@BartWaardenburg ya está trabajando en esto.

Desde el 22/10/2026.

  • #461 de @BartWaardenburg — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
64/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
rust
Área
frontend, web-dev

Línea de trabajo

Empieza en color/lib.rs, en normalize_hue y en la aserción indicada en la línea 307; después, revisa las pruebas de conversión de color hsl, hwb y lch. Reproduce el problema con las entradas de tono que provocan desbordamiento y que se enumeran, en una compilación de depuración, y compara el resultado con el comportamiento de CSS Color 4 y CSS Values 4 descrito aquí. El trabajo estará terminado cuando esas entradas no provoquen el pánico y produzcan los resultados especificados.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

A hue that overflows f32 makes normalize_hue return NaN. Examples are hwb(1e40 0% 0%) and hsl(1e40 50% 50%). In a debug build, to_css_string() on the parsed color then panics:

panicked at color/lib.rs:307:5:
assertion failed: (0.0..=1.0).contains(&hue)

hwb(1e30 0% 0%) does not panic, because 1e30 still fits in an f32.

normalize_hue computes hue - 360.0 * (hue / 360.0).floor(). For an infinite hue, this is inf - inf, which is NaN. A release build does not panic, but the output is wrong:

Input Release output
hwb(1e40 0% 0%) rgb(0, 0, 0)
hsl(1e40 50% 50%) rgb(64, 64, 64)
lch(50% 30 1e40) lch(50 30 calc(NaN))

The spec gives the expected result. CSS Color 4 says that hsl(calc(infinity) 0 0) and hsl(calc(-infinity) 0 0) normalize the hue to 0 degrees. CSS Values 4 censors NaN to 0. So hwb(1e40 0% 0%) must give rgb(255, 0, 0).

Reproduced on main at 9f3cedd.

Related: #167 is about non-finite numbers from the tokenizer in general.

Found by fuzzing Fallow (https://github.com/fallow-rs/fallow) with OSS-Fuzz.

Lenguaje dominante
Rust
Estrellas
874
Forks
150
Merge medio
9 min
PR fusionados (30 d)
1

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 servo/rust-cssparser

Todos los issues de servo/rust-cssparser

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.