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.
This commit is contained in:
Radomir Dopieralski 2017-07-24 12:58:30 +02:00 committed by Damien George
parent a10467b58a
commit 363087aa11
1 changed files with 3 additions and 1 deletions

View File

@ -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");
}