From 24c0b5ecf52c4f24e4feaebfab7b0428b412c569 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Sat, 29 Jul 2023 00:45:37 +0900 Subject: [PATCH] sw_raster c: fix the misaligned memory access. An issue occurred in the 64-bit accelerated raster version, involving 8 bytes of misaligned memory access. This was detected by the memory sanitizer and has now been fixed. --- src/lib/sw_engine/tvgSwRasterC.h | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/lib/sw_engine/tvgSwRasterC.h b/src/lib/sw_engine/tvgSwRasterC.h index 6501bd83..718b2efe 100644 --- a/src/lib/sw_engine/tvgSwRasterC.h +++ b/src/lib/sw_engine/tvgSwRasterC.h @@ -26,17 +26,15 @@ static void inline cRasterPixels(PIXEL_T* dst, PIXEL_T val, uint32_t offset, int dst += offset; //fix the misaligned memory - auto alignOffset = 0; - if (sizeof(PIXEL_T) == 4) alignOffset = offset % 2; - else if (sizeof(PIXEL_T) == 1) { - alignOffset = offset % 8; - if (alignOffset > 0) alignOffset = 8 - alignOffset; - } - - while (alignOffset > 0 && len > 0) { - *dst++ = val; - --len; - --alignOffset; + auto alignOffset = (long) dst % 8; + if (alignOffset > 0) { + if (sizeof(PIXEL_T) == 4) alignOffset /= 4; + else if (sizeof(PIXEL_T) == 1) alignOffset = 8 - alignOffset; + while (alignOffset > 0 && len > 0) { + *dst++ = val; + --len; + --alignOffset; + } } //64bits faster clear