CairoSVG is an SVG converter based on Cairo, a 2D graphics library. Prior to 2.9.1, rendering an attacker-controlled SVG with a path containing many segments can cause quadratic CPU consumption in cairosvg/path.py. The path tokenizer repeatedly slices and rescans the remaining path data, while draw_markers drains node.vertices with node.vertices.pop(0), causing repeated linear-time work. The svg2png, svg2pdf, and svg2ps APIs reach these operations during ordinary rendering, allowing a sub-megabyte SVG to consume substantial CPU and deny service to a rendering application. This issue is fixed in version 2.9.1.
{
"binaries": [
{
"binary_name": "cairo-perf-utils",
"binary_version": "1.16.0-5ubuntu2.1"
},
{
"binary_name": "libcairo-gobject2",
"binary_version": "1.16.0-5ubuntu2.1"
},
{
"binary_name": "libcairo-script-interpreter2",
"binary_version": "1.16.0-5ubuntu2.1"
},
{
"binary_name": "libcairo2",
"binary_version": "1.16.0-5ubuntu2.1"
}
]
}{
"binaries": [
{
"binary_name": "cairo-perf-utils",
"binary_version": "1.14.6-1ubuntu0.1~esm2"
},
{
"binary_name": "libcairo-gobject2",
"binary_version": "1.14.6-1ubuntu0.1~esm2"
},
{
"binary_name": "libcairo-script-interpreter2",
"binary_version": "1.14.6-1ubuntu0.1~esm2"
},
{
"binary_name": "libcairo2",
"binary_version": "1.14.6-1ubuntu0.1~esm2"
}
]
}{
"binaries": [
{
"binary_name": "cairo-perf-utils",
"binary_version": "1.15.10-2ubuntu0.1+esm1"
},
{
"binary_name": "libcairo-gobject2",
"binary_version": "1.15.10-2ubuntu0.1+esm1"
},
{
"binary_name": "libcairo-script-interpreter2",
"binary_version": "1.15.10-2ubuntu0.1+esm1"
},
{
"binary_name": "libcairo2",
"binary_version": "1.15.10-2ubuntu0.1+esm1"
}
]
}{
"binaries": [
{
"binary_name": "cairo-perf-utils",
"binary_version": "1.16.0-4ubuntu1+esm1"
},
{
"binary_name": "libcairo-gobject2",
"binary_version": "1.16.0-4ubuntu1+esm1"
},
{
"binary_name": "libcairo-script-interpreter2",
"binary_version": "1.16.0-4ubuntu1+esm1"
},
{
"binary_name": "libcairo2",
"binary_version": "1.16.0-4ubuntu1+esm1"
}
]
}