diff --git a/Tests/images/cross_scan_line_truncated.tga b/Tests/images/cross_scan_line_truncated.tga new file mode 100644 index 000000000..cec4357e3 Binary files /dev/null and b/Tests/images/cross_scan_line_truncated.tga differ diff --git a/Tests/test_file_tga.py b/Tests/test_file_tga.py index aeea3fb42..0c8c9f304 100644 --- a/Tests/test_file_tga.py +++ b/Tests/test_file_tga.py @@ -101,6 +101,10 @@ def test_cross_scan_line(): with Image.open("Tests/images/cross_scan_line.tga") as im: assert_image_equal_tofile(im, "Tests/images/cross_scan_line.png") + with Image.open("Tests/images/cross_scan_line_truncated.tga") as im: + with pytest.raises(OSError): + im.load() + def test_save(tmp_path): test_file = "Tests/images/tga_id_field.tga" diff --git a/src/libImaging/TgaRleDecode.c b/src/libImaging/TgaRleDecode.c index df430c940..95ae9b622 100644 --- a/src/libImaging/TgaRleDecode.c +++ b/src/libImaging/TgaRleDecode.c @@ -120,6 +120,7 @@ ImagingTgaRleDecode(Imaging im, ImagingCodecState state, UINT8 *buf, Py_ssize_t } memcpy(state->buffer + state->x, ptr, n); ptr += n; + bytes -= n; extra_bytes -= n; } }