diff --git a/client/X11/xf_gfx.c b/client/X11/xf_gfx.c index 6f205bd06..c046d4250 100644 --- a/client/X11/xf_gfx.c +++ b/client/X11/xf_gfx.c @@ -232,8 +232,11 @@ static UINT xf_CreateSurface(RdpgfxClientContext* context, if (xfc->scanline_pad > 0) { - surface->gdi.scanline += (xfc->scanline_pad / 8); - surface->gdi.scanline -= (surface->gdi.scanline % (xfc->scanline_pad / 8)); + const UINT32 align = xfc->scanline_pad / 8; + const UINT32 pad = align - (surface->gdi.scanline % align); + + if (align != pad) + surface->gdi.scanline += pad; } size = surface->gdi.scanline * surface->gdi.height; diff --git a/libfreerdp/gdi/gfx.c b/libfreerdp/gdi/gfx.c index 5c9c7592e..94b78e0ea 100644 --- a/libfreerdp/gdi/gfx.c +++ b/libfreerdp/gdi/gfx.c @@ -698,8 +698,16 @@ static UINT gdi_CreateSurface(RdpgfxClientContext* context, return ERROR_INTERNAL_ERROR; } - surface->scanline = (surface->width + (surface->width % 4)) * 4; - surface->data = (BYTE*) calloc(1, surface->scanline * surface->height); + surface->scanline = surface->width * 4; + { + const UINT32 align = 16; + const UINT32 pad = align - (surface->scanline % align); + + if (align != pad) + surface->scanline += pad; + + surface->data = (BYTE*) calloc(1, surface->scanline * surface->height); + } if (!surface->data) {