From 9ba25f8135702410e791acbd189e55cc5c6fba0c Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 26 Feb 2020 20:15:23 +1100 Subject: [PATCH] Trim end of name, keeping ext --- Tests/images/hopper_long_name.im | Bin 0 -> 49664 bytes Tests/test_file_im.py | 9 +++++++++ src/PIL/ImImagePlugin.py | 9 +++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 Tests/images/hopper_long_name.im diff --git a/Tests/images/hopper_long_name.im b/Tests/images/hopper_long_name.im new file mode 100644 index 0000000000000000000000000000000000000000..ff45b7c75390f1be3b134b09ee78f4edd1bef737 GIT binary patch literal 49664 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 literal 0 HcmV?d00001 diff --git a/Tests/test_file_im.py b/Tests/test_file_im.py index 38ee6c6fb..30a9fd52a 100644 --- a/Tests/test_file_im.py +++ b/Tests/test_file_im.py @@ -1,3 +1,5 @@ +import filecmp + import pytest from PIL import Image, ImImagePlugin @@ -15,6 +17,13 @@ def test_sanity(): assert im.format == "IM" +def test_name_limit(tmp_path): + out = str(tmp_path / ("name_limit_test" * 7 + ".im")) + with Image.open(TEST_IM) as im: + im.save(out) + assert filecmp.cmp(out, "Tests/images/hopper_long_name.im") + + @pytest.mark.skipif(is_pypy(), reason="Requires CPython") def test_unclosed_file(): def open(): diff --git a/src/PIL/ImImagePlugin.py b/src/PIL/ImImagePlugin.py index 427d6e986..8b03f35da 100644 --- a/src/PIL/ImImagePlugin.py +++ b/src/PIL/ImImagePlugin.py @@ -348,9 +348,14 @@ def _save(im, fp, filename): fp.write(("Image type: %s image\r\n" % image_type).encode("ascii")) if filename: - # Each line must be under length 100, or: SyntaxError("not an IM file") + # Each line must be 100 characters or less, + # or: SyntaxError("not an IM file") + # 8 characters are used for "Name: " and "\r\n" # Keep just the filename, ditch the potentially overlong path - fp.write(("Name: %s\r\n" % os.path.basename(filename)).encode("ascii")) + name, ext = os.path.splitext(os.path.basename(filename)) + name = "".join([name[: 92 - len(ext)], ext]) + + fp.write(("Name: %s\r\n" % name).encode("ascii")) fp.write(("Image size (x*y): %d*%d\r\n" % im.size).encode("ascii")) fp.write(("File size (no of images): %d\r\n" % frames).encode("ascii")) if im.mode in ["P", "PA"]: