diff --git a/src/renderer/sw_engine/tvgSwRle.cpp b/src/renderer/sw_engine/tvgSwRle.cpp index 8290927a..1c139d9e 100644 --- a/src/renderer/sw_engine/tvgSwRle.cpp +++ b/src/renderer/sw_engine/tvgSwRle.cpp @@ -1025,7 +1025,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 = static_cast(malloc(sizeof(SwSpan) * (spanCnt))); auto spansEnd = _intersectSpansRegion(clip, rle, spans, spanCnt);