ACK On Fri, Sep 19, 2014 at 11:43:09AM -0500, Jeremy White wrote: > This problem was exposed (and probably only occurs) when using XSpice > in dfps mode with spice-html5, and resizing from larger to smaller. > The screen would be resized, but the update region would still attempt > to transmit any pending changes to the (now) truncated surface. This > would often lead to a crash. > > Signed-off-by: Jeremy White <jwhite@xxxxxxxxxxxxxxx> > --- > src/qxl_image.c | 2 ++ > src/qxl_surface.c | 9 ++++++--- > 2 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/src/qxl_image.c b/src/qxl_image.c > index 8927fd4..1975df6 100644 > --- a/src/qxl_image.c > +++ b/src/qxl_image.c > @@ -62,6 +62,8 @@ hash_and_copy (const uint8_t *src, int src_stride, > const uint8_t *src_line = src + i * src_stride; > uint8_t *dest_line = dest + i * dest_stride; > int n_bytes = width * bytes_per_pixel; > + if (n_bytes > src_stride) > + n_bytes = src_stride; > > if (dest) > memcpy (dest_line, src_line, n_bytes); > diff --git a/src/qxl_surface.c b/src/qxl_surface.c > index 1075eae..72a7f88 100644 > --- a/src/qxl_surface.c > +++ b/src/qxl_surface.c > @@ -290,10 +290,13 @@ upload_one_primary_region(qxl_screen_t *qxl, PixmapPtr pixmap, BoxPtr b) > int stride; > int bpp; > > + if (b->x1 >= qxl->virtual_x || b->y1 >= qxl->virtual_y) > + return; > + > rect.left = b->x1; > - rect.right = b->x2; > + rect.right = min(b->x2, qxl->virtual_x); > rect.top = b->y1; > - rect.bottom = b->y2; > + rect.bottom = min(b->y2, qxl->virtual_y); > > drawable_bo = make_drawable (qxl, qxl->primary, QXL_DRAW_COPY, &rect); > drawable = qxl->bo_funcs->bo_map(drawable_bo); > @@ -309,7 +312,7 @@ upload_one_primary_region(qxl_screen_t *qxl, PixmapPtr pixmap, BoxPtr b) > > fbGetPixmapBitsData(pixmap, data, stride, bpp); > image_bo = qxl_image_create ( > - qxl, (const uint8_t *)data, b->x1, b->y1, b->x2 - b->x1, b->y2 - b->y1, stride * sizeof(*data), > + qxl, (const uint8_t *)data, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, stride * sizeof(*data), > bpp == 24 ? 4 : bpp / 8, TRUE); > qxl->bo_funcs->bo_output_bo_reloc(qxl, offsetof(QXLDrawable, u.copy.src_bitmap), > drawable_bo, image_bo); > -- > 1.7.10.4 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
pgp_rupxl_QDd.pgp
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel