From 6c8ee8211a9aa7c2d086235a36723ed0aed528c6 Mon Sep 17 00:00:00 2001 From: Christopher Chavez Date: Sat, 7 May 2022 06:38:26 -0500 Subject: [PATCH] Avoid calling qsort() when r->nedges == 0 In some unusual cases, r->nedges == 0 and r->edges == NULL. At least glibc declares the array pointer for qsort() to be non-NULL, causing UBSan (-fsanitize=nonnull-attribute) to complain. --- src/nanosvgrast.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/nanosvgrast.h b/src/nanosvgrast.h index 336e515..c6fcfc9 100644 --- a/src/nanosvgrast.h +++ b/src/nanosvgrast.h @@ -1406,7 +1406,8 @@ void nsvgRasterize(NSVGrasterizer* r, } // Rasterize edges - qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); + if (r->nedges != 0) + qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule nsvg__initPaint(&cache, &shape->fill, shape->opacity); @@ -1432,7 +1433,8 @@ void nsvgRasterize(NSVGrasterizer* r, } // Rasterize edges - qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); + if (r->nedges != 0) + qsort(r->edges, r->nedges, sizeof(NSVGedge), nsvg__cmpEdge); // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule nsvg__initPaint(&cache, &shape->stroke, shape->opacity);