From 363087aa11a5121ecff38f9e3a2372a42fa224ac Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Mon, 24 Jul 2017 12:58:30 +0200 Subject: [PATCH] extmod/modframebuf: Fix invalid stride for odd widths in GS4_HMSB fmt. Since the stride is specified in pixels, in a 4-bit horizontal format it has to always be even, otherwise the computation is wrong and we can write outside of the buffer sometimes. --- extmod/modframebuf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extmod/modframebuf.c b/extmod/modframebuf.c index 062a63c3b2..00a48379b6 100644 --- a/extmod/modframebuf.c +++ b/extmod/modframebuf.c @@ -237,12 +237,14 @@ STATIC mp_obj_t framebuf_make_new(const mp_obj_type_t *type, size_t n_args, size switch (o->format) { case FRAMEBUF_MVLSB: case FRAMEBUF_RGB565: - case FRAMEBUF_GS4_HMSB: break; case FRAMEBUF_MHLSB: case FRAMEBUF_MHMSB: o->stride = (o->stride + 7) & ~7; break; + case FRAMEBUF_GS4_HMSB: + o->stride = (o->stride + 1) & ~1; + break; default: mp_raise_ValueError("invalid format"); }