From 5f3526a16cdda9d1466d334de34f81d387a00299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Mon, 28 Oct 2019 14:54:52 +0200 Subject: [PATCH] sna: Don't memcpy() between different types MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently we're doing a blind memcpy() from a DDXPointRec into the beginning of a BoxRec. While this apparently works it's quite dodgy. Get rid of the memcpy() and simply assign each member by hand. Signed-off-by: Ville Syrjälä --- src/sna/fb/fbspan.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/sna/fb/fbspan.c b/src/sna/fb/fbspan.c index 18136c20..0700d881 100644 --- a/src/sna/fb/fbspan.c +++ b/src/sna/fb/fbspan.c @@ -37,14 +37,16 @@ fbFillSpans(DrawablePtr drawable, GCPtr gc, { DBG(("%s x %d\n", __FUNCTION__, n)); while (n--) { - BoxRec box; - - memcpy(&box, pt, sizeof(box)); - box.x2 = box.x1 + *width++; - box.y2 = box.y1 + 1; + BoxRec box = { + .x1 = pt->x, + .y1 = pt->y, + .x2 = pt->x + *width, + .y2 = pt->y + 1, + }; /* XXX fSorted */ fbDrawableRun(drawable, gc, &box, fbFillSpan, NULL); + width++; pt++; } } @@ -90,12 +92,14 @@ fbSetSpans(DrawablePtr drawable, GCPtr gc, data.src = src; while (n--) { - BoxRec box; + BoxRec box = { + .x1 = pt->x, + .y1 = pt->y, + .x2 = pt->x + *width, + .y2 = pt->y + 1, + }; - memcpy(&box, pt, sizeof(box)); data.pt = *pt; - box.x2 = box.x1 + *width; - box.y2 = box.y1 + 1; fbDrawableRun(drawable, gc, &box, fbSetSpan, &data);