diff --git a/Tests/images/negative_height.j2k b/Tests/images/negative_height.j2k new file mode 100644 index 00000000000..1dad43ae054 Binary files /dev/null and b/Tests/images/negative_height.j2k differ diff --git a/Tests/test_file_jpeg2k.py b/Tests/test_file_jpeg2k.py index 677a149810f..8f7d3f776c4 100644 --- a/Tests/test_file_jpeg2k.py +++ b/Tests/test_file_jpeg2k.py @@ -150,6 +150,11 @@ def test_reduce(): assert im.size == (40, 30) +def test_negative_height(): + with Image.open("Tests/images/negative_height.j2k") as im: + assert im.size[1] == 0 + + def test_load_dpi(): with Image.open("Tests/images/test-card-lossless.jp2") as im: assert im.info["dpi"] == (71.9836, 71.9836) diff --git a/src/PIL/Jpeg2KImagePlugin.py b/src/PIL/Jpeg2KImagePlugin.py index c67d8d6bf60..2f946861f63 100644 --- a/src/PIL/Jpeg2KImagePlugin.py +++ b/src/PIL/Jpeg2KImagePlugin.py @@ -109,7 +109,7 @@ def _parse_codestream(fp): for i in range(csiz): ssiz[i], xrsiz[i], yrsiz[i] = struct.unpack_from(">BBB", siz, 36 + 3 * i) - size = (xsiz - xosiz, ysiz - yosiz) + size = (xsiz - xosiz, max(0, ysiz - yosiz)) if csiz == 1: if (yrsiz[0] & 0x7F) > 8: mode = "I;16"