No uses librsvg 2.40.x

Translations: en - Tags: gnome, librsvg

Por favor no uses librsvg 2.40.x; no puede renderizar el tema de iconos Adaita de forma correcta.

La serie 2.40.x de librsvg es la última que estaba escrita sólo en C; dejé de darle soporte en 2017.

Al hacer el port a Rust, re-escribí el parser de paths para que cumpliera con la especificación de SVG, y le arreglé algunos casos que la versión en C no manejaba. Uno de estos casos es para comandos de Arcos con datos compactos.

La gramática de SVG permite omitir los espacios en blanco entre dos números si el segundo número comienza con un signo. Por ejemplo, 23-45 se considera como dos números 23 -45.

Además, los argumentos de los comandos de Arcos tienen dos banderas en medio de unos cuantos números. Las banderas pueden ser 0 ó 1, y puede omitirse el espacio entre ellas y el número que les sigue. Por ejemplo, A1.98 1.98 0 0015 13.96 se considera como A1.98 1.98 0 0 0 15 13.96 — observa las dos banderas 0 0 antes del 15.

Librsvg 2.40.x no puede parsear esto correctamente. Adwaita-icon-theme-3.36, y seguramente versiones anteriores, usa SVGs minimizados y con espacio en blanco comprimido, y no se renderiza correctamente con la versión de librsvg que está escrita sólo en C.

Éste es help-contents-symbolic.svg al renderizarse con librsvg 2.40.21:

icono renderizado incorrectamente

Y aquí está help-contents-symbolic.svg renderizado con librsvg 2.50.2:

icono renderizado correctamente

Éste no es el único icono con comandos de Arcos compactos; hay muchos otros que tampoco van a renderizarse correctamente con librsvg 2.40.x.

No sé cuándo empezó Adwaita a usar SVGs con espacio en blanco minimizado; seguramente no lo hacía cuando librsvg 2.40.x era la última versión disponible, o todo el mundo se habría dado cuenta de los iconos incorrectos.

Detalles: Alguien ingresó un bug sobre uso incorrecto de memoria en el parser de paths de librsvg 2.40.x, que de forma misteriosa sólo se manifiesta en máquinas big-endian. No me sorprendería que también haya bugs escondidos en plataformas little-endian.

Por favor usa por lo menos librsvg 2.48.x; cualquier versión anterior no tiene soporte. Usualmente le echo un ojo a las dos últimas series estables (2.48.x and 2.50.x a la fecha de hoy), pero sólo le pongo correcciones a la última versión estable (2.50.x a la fecha).