From 1b72113fcc2fdec249aea00a397ca0d07c8cee4f Mon Sep 17 00:00:00 2001 From: Mira Grudzinska Date: Wed, 21 May 2025 11:09:46 +0200 Subject: [PATCH] sw_engine: fix too small memory alloc for spans In some clipping cases, the memory allocated for storing spans was too small. As a result, the entire clipped area might not have been rendered. This has been resolved by adding an experimental factor to increase the size of allocated memory. @issue: https://github.com/thorvg/thorvg/issues/3461 --- src/renderer/sw_engine/tvgSwRle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/sw_engine/tvgSwRle.cpp b/src/renderer/sw_engine/tvgSwRle.cpp index d81ca1e3..de9112a6 100644 --- a/src/renderer/sw_engine/tvgSwRle.cpp +++ b/src/renderer/sw_engine/tvgSwRle.cpp @@ -997,7 +997,7 @@ void rleFree(SwRle* rle) bool rleClip(SwRle *rle, const SwRle *clip) { if (rle->size == 0 || clip->size == 0) return false; - auto spanCnt = rle->size > clip->size ? rle->size : clip->size; + auto spanCnt = 2 * (rle->size > clip->size ? rle->size : clip->size); //factor 2 added for safety (no real cases observed where the factor exceeded 1.4) auto spans = tvg::malloc(sizeof(SwSpan) * (spanCnt)); auto spansEnd = _intersectSpansRegion(clip, rle, spans, spanCnt);