diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-05-24 16:20:49 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2020-05-24 16:21:36 +0100 |
commit | 74b8767ee2628f46d4e595a3a5e1928fcbb3f64c (patch) | |
tree | 4e199e980a0f04373c275a41bfe090d21da31b71 /content/handlers | |
parent | 1c4025e92c8da488e6c931009725e0e1d6902d01 (diff) | |
download | netsurf-74b8767ee2628f46d4e595a3a5e1928fcbb3f64c.tar.gz netsurf-74b8767ee2628f46d4e595a3a5e1928fcbb3f64c.tar.bz2 |
Canvas: Do not overrun destination bitmap during creation
Signed-off-by: Daniel Silverstone <dsilvers@digital-scurf.org>
Diffstat (limited to 'content/handlers')
-rw-r--r-- | content/handlers/javascript/duktape/CanvasRenderingContext2D.bnd | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/content/handlers/javascript/duktape/CanvasRenderingContext2D.bnd b/content/handlers/javascript/duktape/CanvasRenderingContext2D.bnd index 272e8e7c7..007c58770 100644 --- a/content/handlers/javascript/duktape/CanvasRenderingContext2D.bnd +++ b/content/handlers/javascript/duktape/CanvasRenderingContext2D.bnd @@ -428,7 +428,7 @@ method CanvasRenderingContext2D::getImageData() int width = duk_get_int(ctx, 2); int height = duk_get_int(ctx, 3); image_data_private_t *idpriv; - uint8_t *bitmap_base; + uint8_t *src_base, *dst_base; if (priv->bitmap == NULL) return duk_generic_error(ctx, "Canvas in bad state, sorry"); @@ -456,11 +456,12 @@ method CanvasRenderingContext2D::getImageData() /* We now have access to the imagedata private, so we need to copy * the pixel range out of ourselves */ - bitmap_base = guit->bitmap->get_buffer(priv->bitmap); + src_base = guit->bitmap->get_buffer(priv->bitmap); + dst_base = idpriv->data; for (int yy = y; yy < (y+height); ++yy) { - uint8_t *src_base = bitmap_base + (priv->stride * yy); - uint8_t *dst_base = idpriv->data + (width * 4); - memcpy(dst_base + (x * 4), src_base + (x * 4), width * 4); + memcpy(dst_base, src_base + (x * 4), width * 4); + src_base += priv->stride; + dst_base += (width * 4); } return 1; %} |