Skip to content

Commit ae5ec03

Browse files
authored
Merge branch 'main' into jpeg-app-segments
2 parents 7df5cfe + eec43cf commit ae5ec03

40 files changed

+228
-159
lines changed

.ci/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ fi
2020
set -e
2121

2222
if [[ $(uname) != CYGWIN* ]]; then
23-
sudo apt-get -qq install libfreetype6-dev liblcms2-dev python3-tk\
23+
sudo apt-get -qq install libfreetype6-dev liblcms2-dev libtiff-dev python3-tk\
2424
ghostscript libjpeg-turbo8-dev libopenjp2-7-dev\
2525
cmake meson imagemagick libharfbuzz-dev libfribidi-dev\
2626
sway wl-clipboard libopenblas-dev

.ci/requirements-cibw.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
cibuildwheel==2.23.0
1+
cibuildwheel==2.23.1

.github/renovate.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
}
1717
],
1818
"schedule": [
19-
"on the 3rd day of the month"
19+
"* * 3 * *"
2020
]
2121
}

.github/workflows/test-docker.yml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ jobs:
3535
matrix:
3636
os: ["ubuntu-latest"]
3737
docker: [
38+
# Run slower jobs first to give them a headstart and reduce waiting time
39+
ubuntu-24.04-noble-ppc64le,
40+
ubuntu-24.04-noble-s390x,
41+
# Then run the remainder
3842
alpine,
3943
amazon-2-amd64,
4044
amazon-2023-amd64,
@@ -52,13 +56,9 @@ jobs:
5256
dockerTag: [main]
5357
include:
5458
- docker: "ubuntu-24.04-noble-ppc64le"
55-
os: "ubuntu-22.04"
5659
qemu-arch: "ppc64le"
57-
dockerTag: main
5860
- docker: "ubuntu-24.04-noble-s390x"
59-
os: "ubuntu-22.04"
6061
qemu-arch: "s390x"
61-
dockerTag: main
6262
- docker: "ubuntu-24.04-noble-arm64v8"
6363
os: "ubuntu-24.04-arm"
6464
dockerTag: main
@@ -75,8 +75,9 @@ jobs:
7575

7676
- name: Set up QEMU
7777
if: "matrix.qemu-arch"
78-
run: |
79-
docker run --rm --privileged aptman/qus -s -- -p ${{ matrix.qemu-arch }}
78+
uses: docker/setup-qemu-action@v3
79+
with:
80+
platforms: ${{ matrix.qemu-arch }}
8081

8182
- name: Docker pull
8283
run: |

.github/workflows/test-windows.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ jobs:
9494
choco install nasm --no-progress
9595
echo "C:\Program Files\NASM" >> $env:GITHUB_PATH
9696
97-
choco install ghostscript --version=10.4.0 --no-progress
98-
echo "C:\Program Files\gs\gs10.04.0\bin" >> $env:GITHUB_PATH
97+
choco install ghostscript --version=10.5.0 --no-progress
98+
echo "C:\Program Files\gs\gs10.05.0\bin" >> $env:GITHUB_PATH
9999
100100
# Install extra test images
101101
xcopy /S /Y Tests\test-images\* Tests\images

.github/workflows/wheels-dependencies.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ LIBPNG_VERSION=1.6.47
4343
JPEGTURBO_VERSION=3.1.0
4444
OPENJPEG_VERSION=2.5.3
4545
XZ_VERSION=5.6.4
46-
TIFF_VERSION=4.6.0
46+
TIFF_VERSION=4.7.0
4747
LCMS2_VERSION=2.17
4848
ZLIB_NG_VERSION=2.2.4
4949
LIBWEBP_VERSION=1.5.0

Tests/test_file_apng.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,11 @@ def test_apng_basic() -> None:
3434
with pytest.raises(EOFError):
3535
im.seek(2)
3636

37-
# test rewind support
3837
im.seek(0)
38+
with pytest.raises(ValueError, match="cannot seek to frame 2"):
39+
im._seek(2)
40+
41+
# test rewind support
3942
assert im.getpixel((0, 0)) == (255, 0, 0, 255)
4043
assert im.getpixel((64, 32)) == (255, 0, 0, 255)
4144
im.seek(1)

Tests/test_file_fli.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import io
34
import warnings
45

56
import pytest
@@ -132,6 +133,15 @@ def test_eoferror() -> None:
132133
im.seek(n_frames - 1)
133134

134135

136+
def test_missing_frame_size() -> None:
137+
with open(animated_test_file, "rb") as fp:
138+
data = fp.read()
139+
data = data[:6188]
140+
with Image.open(io.BytesIO(data)) as im:
141+
with pytest.raises(EOFError, match="missing frame size"):
142+
im.seek(1)
143+
144+
135145
def test_seek_tell() -> None:
136146
with Image.open(animated_test_file) as im:
137147
layer_number = im.tell()
@@ -160,6 +170,9 @@ def test_seek() -> None:
160170

161171
assert_image_equal_tofile(im, "Tests/images/a_fli.png")
162172

173+
with pytest.raises(ValueError, match="cannot seek to frame 52"):
174+
im._seek(52)
175+
163176

164177
@pytest.mark.parametrize(
165178
"test_file",

Tests/test_file_gif.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,10 @@ def test_seek() -> None:
410410
except EOFError:
411411
assert frame_count == 5
412412

413+
img.seek(0)
414+
with pytest.raises(ValueError, match="cannot seek to frame 2"):
415+
img._seek(2)
416+
413417

414418
def test_seek_info() -> None:
415419
with Image.open("Tests/images/iss634.gif") as im:
@@ -601,7 +605,7 @@ def test_save_dispose(tmp_path: Path) -> None:
601605
Image.new("L", (100, 100), "#111"),
602606
Image.new("L", (100, 100), "#222"),
603607
]
604-
for method in range(0, 4):
608+
for method in range(4):
605609
im_list[0].save(out, save_all=True, append_images=im_list[1:], disposal=method)
606610
with Image.open(out) as img:
607611
for _ in range(2):

Tests/test_file_jpeg2k.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,18 @@ def test_rgba(ext: str) -> None:
313313
assert im.mode == "RGBA"
314314

315315

316+
def test_grayscale_four_channels() -> None:
317+
with open("Tests/images/rgb_trns_ycbc.jp2", "rb") as fp:
318+
data = fp.read()
319+
320+
# Change color space to OPJ_CLRSPC_GRAY
321+
data = data[:76] + b"\x11" + data[77:]
322+
323+
with Image.open(BytesIO(data)) as im:
324+
im.load()
325+
assert im.mode == "RGBA"
326+
327+
316328
@pytest.mark.skipif(
317329
not os.path.exists(EXTRA_DIR), reason="Extra image files not installed"
318330
)

0 commit comments

Comments
 (0)