diff --git a/kitty/graphics.c b/kitty/graphics.c index 180ba0aac..f06f5cfe2 100644 --- a/kitty/graphics.c +++ b/kitty/graphics.c @@ -266,7 +266,7 @@ inflate_png_inner(struct png_jmp_data *d, uint8_t *buf, size_t bufsz) { if (d->decompressed == NULL) ABRT(ENOMEM, "Out of memory allocating decompression buffer for PNG"); d->row_pointers = malloc(d->height * sizeof(png_bytep)); if (d->row_pointers == NULL) ABRT(ENOMEM, "Out of memory allocating row_pointers buffer for PNG"); - for (int i = 0; i < d->height; i++) d->row_pointers[d->height - 1 - i] = d->decompressed + i * rowbytes; + for (int i = 0; i < d->height; i++) d->row_pointers[i] = d->decompressed + i * rowbytes; png_read_image(png, d->row_pointers); d->ok = true; diff --git a/kitty_tests/graphics.py b/kitty_tests/graphics.py index f0ebd9e74..503e61051 100644 --- a/kitty_tests/graphics.py +++ b/kitty_tests/graphics.py @@ -131,8 +131,9 @@ class TestGraphics(BaseTest): def test_load_png(self): s, g, l, sl = load_helpers(self) w, h = 5, 3 - img = Image.new('RGBA', (w, h), 'red') - rgba_data = img.tobytes() + rgba_data = os.urandom(w * h * 4) + img = Image.frombytes('RGBA', (w, h), rgba_data) + rgb_data = img.convert('RGB').convert('RGBA').tobytes() def png(mode='RGBA'): buf = BytesIO() @@ -142,9 +143,9 @@ class TestGraphics(BaseTest): i.save(buf, 'PNG') return buf.getvalue() - for mode in 'RGBA RGB P'.split(): + for mode in 'RGBA P RGB'.split(): data = png(mode) - sl(data, f=100, expecting_data=rgba_data) + sl(data, f=100, expecting_data=rgb_data if mode == 'RGB' else rgba_data) img = img.convert('L') rgba_data = img.convert('RGBA').tobytes()