diff --git a/src/lib/sw_engine/tvgSwRle.cpp b/src/lib/sw_engine/tvgSwRle.cpp index 25b9c03a..1d3d4987 100644 --- a/src/lib/sw_engine/tvgSwRle.cpp +++ b/src/lib/sw_engine/tvgSwRle.cpp @@ -145,9 +145,9 @@ static void _genSpan(SwRleData* rle, SwSpan* spans, size_t count) /* alloc is required to prevent free and reallocation */ /* when the rle needs to be regenerated because of attribute change. */ if (rle->alloc < newSize) { - rle->spans = static_cast(realloc(rle->spans, newSize * sizeof(SwSpan))); + rle->spans = static_cast(realloc(rle->spans, (count + rle->size) << 2 * sizeof(SwSpan))); assert(rle->spans); - rle->alloc = newSize; + rle->alloc = rle->size + (count << 2); } //copy the new spans to the allocated memory