Segmentation fault for converting jp2 file on ArchLinux
What did you do?
- On ArchLinux, install with
pacman -S python-pillow python-pymupdf - Run
python test.py
What did you expect to happen?
out.png created
What actually happened?
Segmentation fault (core dumped) python test.py
What are your OS, Python and Pillow versions?
- OS: ArchLinux
- Python: 3.13.7
- Pillow: 12.0.0
--------------------------------------------------------------------
Pillow 12.0.0
Python 3.13.7 (main, Aug 15 2025, 12:34:02) [GCC 15.2.1 20250813]
--------------------------------------------------------------------
Python executable is /usr/sbin/python3
System Python files loaded from /usr
--------------------------------------------------------------------
Python Pillow modules loaded from /usr/lib/python3.13/site-packages/PIL
Binary Pillow modules loaded from /usr/lib/python3.13/site-packages/PIL
--------------------------------------------------------------------
--- PIL CORE support ok, compiled for 12.0.0
/usr/lib/python3.13/site-packages/PIL/features.py:43: UserWarning: libtk8.6.so: cannot open shared object file: No such file or directory
warnings.warn(str(ex))
*** TKINTER support not installed
--- FREETYPE2 support ok, loaded 2.14.1
--- LITTLECMS2 support ok, loaded 2.17
--- WEBP support ok, loaded 1.6.0
--- AVIF support ok, loaded 1.3.0
--- JPEG support ok, compiled for libjpeg-turbo 3.1.2
--- OPENJPEG (JPEG2000) support ok, loaded 2.5.4
--- ZLIB (PNG/ZIP) support ok, loaded 1.3.1
--- LIBTIFF support ok, loaded 4.7.1
--- RAQM (Bidirectional Text) support ok, loaded 0.10.3
--- LIBIMAGEQUANT (Quantization method) support ok, loaded 4.2.2
--- XCB (X protocol) support ok
--------------------------------------------------------------------
Content of test.py:
import pymupdf
from PIL import Image
image1 = Image.open('test.jp2')
image1.save('out.png')
Test image file:
I have this error only if pymupdf and pillow are installed from Arch repository, if I install from pip no error happens.
Also if I remove import pymupdf or import pymupdf after importing PIL, no error happens.
Hi. A few questions.
- Is this something that only started happening recently? For example, was this perhaps triggered by the release of Pillow 12?
- You mention that you tried installing Pillow from pip and found that it passed. Does it pass if you install Pillow from source, rather than from a wheel?
- I suppose you've considered reporting this to https://gitlab.archlinux.org/archlinux/packaging/packages/python-pymupdf or https://gitlab.archlinux.org/archlinux/packaging/packages/python-pillow?
- I tried Pillow 11.0.0 and same problem.
- Same problem if I use
pip install --no-binary :all: pillowto install. - I do not have an account for gitlab.archlinux.org, I will report there once I get approved.
- Stack trace for segfault:
Program received signal SIGSEGV, Segmentation fault.
0x00007f41ad6b6402 in ?? () from /usr/lib/libmupdf.so.26.10
Thread 1 (Thread 0x7f41b10e1bc0 (LWP 704) "python"):
#0 0x00007f41ad6b6402 in ?? () from /usr/lib/libmupdf.so.26.10
No symbol table info available.
#1 0x00007f41ad6b9d2a in fz_calloc_no_throw () from /usr/lib/libmupdf.so.26.10
No symbol table info available.
#2 0x00007f41accdafd7 in opj_stream_create (p_buffer_size=p_buffer_size@entry=1048576, l_is_input=l_is_input@entry=1) at /usr/src/debug/openjpeg2/openjpeg-2.5.4/src/lib/openjp2/cio.c:162
l_stream = 0x0
#3 0x00007f41a7ccfa52 in j2k_decode_entry (im=0x556a332c6c10, state=0x7f419e5ec440) at src/libImaging/Jpeg2KDecode.c:649
context = 0x556a33970620
stream = 0x0
image = 0x0
codec = 0x0
params = {cp_reduce = 3423896503, cp_layer = 1769372142, infile = "@3\306g\374\177\000\000\3402\306g\374\177\000\000\001\000\000\000\b\000\000\000\267\203\324\314\356yvi\000\000\000\000\000\000\000\000\2402\306g\374\177\000\000\000\000\000\000\000\000\000\000\267\203\224\314\356yvi\b\000\000\000\000\000\000\000\b", '\000' <repeats 23 times>, "pr\0343jU\000\000\3009\306g\374\177\000\000\345㛱A\177\000\000\001\000\000\000A\177\000\000\240]\237\261A\177\000\000\000\000\000\000\000\000\000\000\243ܛ\261A\177\000\000\001\000\000\000A\177\000\000`\252\232\261A\177\000\000\2203\306g\374\177\000\000\243ܛ\261A\177\000\000\001\000\000\000A\177\000\000p\257G3jU\000\000\2603\306g"..., outfile = "\000\236\364\026\377\274\221\350\377\377\377\377\000\000\003\000\240\304ӧA\177\000\000\360m\223\261A\177\000\000p\213\000\261A\177\000\000\000\000\000\000\000\000\000\000\240\304ӧA\177\000\000\220C\306g\374\177\000\000\226\274Z\261A\177\000\000\000\000\000\000\000\000\000\000`\365`\236A\177\000\000 D\306g\374\177\000\000\000\236\364\026\377\274\221\350\001\000\000\000\000\000\000\000@j`\236A\177\000\000\240T\306g\374\177\000\000\261\aV\261A\177\000\0000D\306g\374\177\000\000\001", '\000' <repeats 15 times>, "P\214̨A\177\000\000\202\351\322\317cw\203\n\000\236\364\026\377\274\221\350\000\000\000\000A\177\000\000\002\000\000\000\000\000\000\000XL\306"..., decod_format = -1637956576, cod_format = 32577, DA_x0 = 2979717928, DA_x1 = 32577, DA_y0 = 2657154960, DA_y1 = 32577, m_verbose = 1741050896, tile_index = 32764, nb_tile_to_decode = 2975229324, jpwl_correct = 32577, jpwl_exp_comps = 24, jpwl_max_tiles = 48, flags = 1741050912}
color_space = <optimized out>
unpack = 0x0
tile_bytes = 0
n = <optimized out>
tile_height = <optimized out>
tile_width = <optimized out>
subsampling = <optimized out>
total_component_width = 0
quick_exit = <optimized out>
#4 0x00007f41a7cd00b0 in ImagingJpeg2KDecode (buf=<optimized out>, bytes=<optimized out>, im=<optimized out>, state=<optimized out>) at src/libImaging/Jpeg2KDecode.c:948
No locals.
#5 ImagingJpeg2KDecode (im=<optimized out>, state=<optimized out>, buf=<optimized out>, bytes=<optimized out>) at src/libImaging/Jpeg2KDecode.c:934
No locals.
#6 0x00007f41a7ca45cc in _decode (decoder=0x7f419e5ec420, args=<optimized out>) at src/decode.c:132
buffer = {buf = 0x7f41b18f7350 <_PyRuntime+22256>, obj = 0x7f41b18f7330 <_PyRuntime+22224>, len = 0, itemsize = 1, readonly = 1, ndim = 1, format = 0x0, shape = 0x0, strides = 0x0, suboffsets = 0x0, internal = 0x0}
status = <optimized out>
cookie = 0xe891bcff16f49e00
#7 0x00007f41b161eca7 in method_vectorcall_VARARGS (func=0x7f419e60f6a0, args=0x7f41b19ae328, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/descrobject.c:324
tstate = <optimized out>
nargs = <optimized out>
argstuple = <optimized out>
meth = <optimized out>
result = <optimized out>
#8 0x00007f41b15685bd in _PyObject_VectorcallTstate (tstate=0x7f41b1936df0 <_PyRuntime+283024>, callable=0x7f419e60f6a0, args=0x7f41b19ae328, nargsf=9223372036854775810, kwnames=0x0) at ./Include/internal/pycore_call.h:168
func = <optimized out>
res = <optimized out>
nargs = <optimized out>
#9 PyObject_Vectorcall (callable=0x7f419e60f6a0, args=0x7f41b19ae328, nargsf=9223372036854775810, kwnames=0x0) at Objects/call.c:327
tstate = 0x7f41b1936df0 <_PyRuntime+283024>
#10 0x00007f41b157a97a in _PyEval_EvalFrameDefault (tstate=<optimized out>, frame=<optimized out>, throwflag=<optimized out>) at Python/generated_cases.c.h:813
total_args = <optimized out>
self_or_null = <optimized out>
callable = 0x7f419e60f6a0
this_instr = <optimized out>
args = 0x7f41b19ae328
res = <optimized out>
opcode = <optimized out>
oparg = <optimized out>
entry_frame = {f_executable = 0x7f41b18e9150 <_Py_NoneStruct>, previous = 0x0, f_funcobj = 0x7ffc67c656d0, f_globals = 0x7f41b0e5c080, f_builtins = 0x7f41b18fbd58 <_PyRuntime+41208>, f_locals = 0x7f41b0e5c080, frame_obj = 0x7ffc67c65720, instr_ptr = 0x7f41b17d5482 <_Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS+2>, stacktop = 0, return_offset = 0, owner = 3 '\003', localsplus = {0x7f41b1936df0 <_PyRuntime+283024>}}
next_instr = <optimized out>
stack_pointer = <optimized out>
exception_unwind = <optimized out>
dying = <optimized out>
__func__ = "_PyEval_EvalFrameDefault"
opcode_targets = {0x7f41b14580b1 <_PyEval_EvalFrameDefault-1173487>, 0x7f41b1455986 <_PyEval_EvalFrameDefault-1183514>, 0x7f41b157c978 <_PyEval_EvalFrameDefault+24792>, 0x7f41b157cc3d <_PyEval_EvalFrameDefault+25501>, 0x7f41b157ace6 <_PyEval_EvalFrameDefault+17478>, 0x7f41b15795f3 <_PyEval_EvalFrameDefault+11603>, 0x7f41b1453578 <_PyEval_EvalFrameDefault-1192744>, 0x7f41b157c2f5 <_PyEval_EvalFrameDefault+23125>, 0x7f41b157df6b <_PyEval_EvalFrameDefault+30411>, 0x7f41b157c618 <_PyEval_EvalFrameDefault+23928>, 0x7f41b145677c <_PyEval_EvalFrameDefault-1179940>, 0x7f41b157e4d4 <_PyEval_EvalFrameDefault+31796>, 0x7f41b157d9d4 <_PyEval_EvalFrameDefault+28980>, 0x7f41b157cd9e <_PyEval_EvalFrameDefault+25854>, 0x7f41b157c6f3 <_PyEval_EvalFrameDefault+24147>, 0x7f41b157cd10 <_PyEval_EvalFrameDefault+25712>, 0x7f41b1459056 <_PyEval_EvalFrameDefault-1169482>, 0x7f41b14545b4 <_PyEval_EvalFrameDefault-1188588>, 0x7f41b1458f7a <_PyEval_EvalFrameDefault-1169702>, 0x7f41b1579899 <_PyEval_EvalFrameDefault+12281>, 0x7f41b157ea7d <_PyEval_EvalFrameDefault+33245>, 0x7f41b157e9f2 <_PyEval_EvalFrameDefault+33106>, 0x7f41b157734c <_PyEval_EvalFrameDefault+2732>, 0x7f41b1457da1 <_PyEval_EvalFrameDefault-1174271>, 0x7f41b157eb66 <_PyEval_EvalFrameDefault+33478>, 0x7f41b157e488 <_PyEval_EvalFrameDefault+31720>, 0x7f41b157bf69 <_PyEval_EvalFrameDefault+22217>, 0x7f41b157f2d4 <_PyEval_EvalFrameDefault+35380>, 0x7f41b157f281 <_PyEval_EvalFrameDefault+35297>, 0x7f41b157d981 <_PyEval_EvalFrameDefault+28897>, 0x7f41b15795c5 <_PyEval_EvalFrameDefault+11557>, 0x7f41b157bdeb <_PyEval_EvalFrameDefault+21835>, 0x7f41b15770b5 <_PyEval_EvalFrameDefault+2069>, 0x7f41b157c165 <_PyEval_EvalFrameDefault+22725>, 0x7f41b1576cfe <_PyEval_EvalFrameDefault+1118>, 0x7f41b157c03b <_PyEval_EvalFrameDefault+22427>, 0x7f41b15772c2 <_PyEval_EvalFrameDefault+2594>, 0x7f41b157da43 <_PyEval_EvalFrameDefault+29091>, 0x7f41b157ca9f <_PyEval_EvalFrameDefault+25087>, 0x7f41b157b366 <_PyEval_EvalFrameDefault+19142>, 0x7f41b157937e <_PyEval_EvalFrameDefault+10974>, 0x7f41b157e130 <_PyEval_EvalFrameDefault+30864>, 0x7f41b157c51d <_PyEval_EvalFrameDefault+23677>, 0x7f41b157c57d <_PyEval_EvalFrameDefault+23773>, 0x7f41b157e373 <_PyEval_EvalFrameDefault+31443>, 0x7f41b157791a <_PyEval_EvalFrameDefault+4218>, 0x7f41b157e287 <_PyEval_EvalFrameDefault+31207>, 0x7f41b157ab97 <_PyEval_EvalFrameDefault+17143>, 0x7f41b157a507 <_PyEval_EvalFrameDefault+15463>, 0x7f41b157deb6 <_PyEval_EvalFrameDefault+30230>, 0x7f41b157d3df <_PyEval_EvalFrameDefault+27455>, 0x7f41b157c7f7 <_PyEval_EvalFrameDefault+24407>, 0x7f41b15796cc <_PyEval_EvalFrameDefault+11820>, 0x7f41b157a898 <_PyEval_EvalFrameDefault+16376>, 0x7f41b157bbfc <_PyEval_EvalFrameDefault+21340>, 0x7f41b157e959 <_PyEval_EvalFrameDefault+32953>, 0x7f41b157e8bd <_PyEval_EvalFrameDefault+32797>, 0x7f41b157942a <_PyEval_EvalFrameDefault+11146>, 0x7f41b15787d8 <_PyEval_EvalFrameDefault+7992>, 0x7f41b1579add <_PyEval_EvalFrameDefault+12861>, 0x7f41b157d58b <_PyEval_EvalFrameDefault+27883>, 0x7f41b15785e5 <_PyEval_EvalFrameDefault+7493>, 0x7f41b1577cdf <_PyEval_EvalFrameDefault+5183>, 0x7f41b157bb81 <_PyEval_EvalFrameDefault+21217>, 0x7f41b157e516 <_PyEval_EvalFrameDefault+31862>, 0x7f41b157dffb <_PyEval_EvalFrameDefault+30555>, 0x7f41b1458594 <_PyEval_EvalFrameDefault-1172236>, 0x7f41b157e41d <_PyEval_EvalFrameDefault+31613>, 0x7f41b157c3dc <_PyEval_EvalFrameDefault+23356>, 0x7f41b157e1f5 <_PyEval_EvalFrameDefault+31061>, 0x7f41b1454b0a <_PyEval_EvalFrameDefault-1187222>, 0x7f41b157a252 <_PyEval_EvalFrameDefault+14770>, 0x7f41b15776ae <_PyEval_EvalFrameDefault+3598>, 0x7f41b157ead7 <_PyEval_EvalFrameDefault+33335>, 0x7f41b157ed38 <_PyEval_EvalFrameDefault+33944>, 0x7f41b157daff <_PyEval_EvalFrameDefault+29279>, 0x7f41b1578631 <_PyEval_EvalFrameDefault+7569>, 0x7f41b1576d39 <_PyEval_EvalFrameDefault+1177>, 0x7f41b157a5af <_PyEval_EvalFrameDefault+15631>, 0x7f41b1579dff <_PyEval_EvalFrameDefault+13663>, 0x7f41b15780da <_PyEval_EvalFrameDefault+6202>, 0x7f41b157dd3e <_PyEval_EvalFrameDefault+29854>, 0x7f41b1577af0 <_PyEval_EvalFrameDefault+4688>, 0x7f41b1576a6e <_PyEval_EvalFrameDefault+462>, 0x7f41b1577658 <_PyEval_EvalFrameDefault+3512>, 0x7f41b157699b <_PyEval_EvalFrameDefault+251>, 0x7f41b157bd9f <_PyEval_EvalFrameDefault+21759>, 0x7f41b157d5fe <_PyEval_EvalFrameDefault+27998>, 0x7f41b1576abe <_PyEval_EvalFrameDefault+542>, 0x7f41b157f00c <_PyEval_EvalFrameDefault+34668>, 0x7f41b14554e7 <_PyEval_EvalFrameDefault-1184697>, 0x7f41b157d64e <_PyEval_EvalFrameDefault+28078>, 0x7f41b157c8ef <_PyEval_EvalFrameDefault+24655>, 0x7f41b157f0ce <_PyEval_EvalFrameDefault+34862>, 0x7f41b157be6f <_PyEval_EvalFrameDefault+21967>, 0x7f41b157d758 <_PyEval_EvalFrameDefault+28344>, 0x7f41b157ef4a <_PyEval_EvalFrameDefault+34474>, 0x7f41b1576c40 <_PyEval_EvalFrameDefault+928>, 0x7f41b1578bf7 <_PyEval_EvalFrameDefault+9047>, 0x7f41b1578765 <_PyEval_EvalFrameDefault+7877>, 0x7f41b1576c9f <_PyEval_EvalFrameDefault+1023>, 0x7f41b157dc68 <_PyEval_EvalFrameDefault+29640>, 0x7f41b157cde2 <_PyEval_EvalFrameDefault+25922>, 0x7f41b1576f6f <_PyEval_EvalFrameDefault+1743>, 0x7f41b157aa7b <_PyEval_EvalFrameDefault+16859>, 0x7f41b157ae3f <_PyEval_EvalFrameDefault+17823>, 0x7f41b157c5c9 <_PyEval_EvalFrameDefault+23849>, 0x7f41b157de3d <_PyEval_EvalFrameDefault+30109>, 0x7f41b157ac00 <_PyEval_EvalFrameDefault+17248>, 0x7f41b157c693 <_PyEval_EvalFrameDefault+24051>, 0x7f41b15769e7 <_PyEval_EvalFrameDefault+327>, 0x7f41b1577f51 <_PyEval_EvalFrameDefault+5809>, 0x7f41b15784da <_PyEval_EvalFrameDefault+7226>, 0x7f41b157e7a9 <_PyEval_EvalFrameDefault+32521>, 0x7f41b157c483 <_PyEval_EvalFrameDefault+23523>, 0x7f41b1578f95 <_PyEval_EvalFrameDefault+9973>, 0x7f41b157ddb3 <_PyEval_EvalFrameDefault+29971>, 0x7f41b157e057 <_PyEval_EvalFrameDefault+30647>, 0x7f41b1578d8a <_PyEval_EvalFrameDefault+9450>, 0x7f41b1458516 <_PyEval_EvalFrameDefault-1172362> <repeats 30 times>, 0x7f41b157a791 <_PyEval_EvalFrameDefault+16113>, 0x7f41b157b063 <_PyEval_EvalFrameDefault+18371>, 0x7f41b15782ca <_PyEval_EvalFrameDefault+6698>, 0x7f41b157b286 <_PyEval_EvalFrameDefault+18918>, 0x7f41b1577c4f <_PyEval_EvalFrameDefault+5039>, 0x7f41b1579a2f <_PyEval_EvalFrameDefault+12687>, 0x7f41b157a181 <_PyEval_EvalFrameDefault+14561>, 0x7f41b1578a91 <_PyEval_EvalFrameDefault+8689>, 0x7f41b157a3f3 <_PyEval_EvalFrameDefault+15187>, 0x7f41b157d824 <_PyEval_EvalFrameDefault+28548>, 0x7f41b1578b3f <_PyEval_EvalFrameDefault+8863>, 0x7f41b157836f <_PyEval_EvalFrameDefault+6863>, 0x7f41b157b0f8 <_PyEval_EvalFrameDefault+18520>, 0x7f41b157d0c1 <_PyEval_EvalFrameDefault+26657>, 0x7f41b15790e1 <_PyEval_EvalFrameDefault+10305>, 0x7f41b157a007 <_PyEval_EvalFrameDefault+14183>, 0x7f41b1578900 <_PyEval_EvalFrameDefault+8288>, 0x7f41b1577dd4 <_PyEval_EvalFrameDefault+5428>, 0x7f41b157a288 <_PyEval_EvalFrameDefault+14824>, 0x7f41b15770f7 <_PyEval_EvalFrameDefault+2135>, 0x7f41b15781c7 <_PyEval_EvalFrameDefault+6439>, 0x7f41b1578fdc <_PyEval_EvalFrameDefault+10044>, 0x7f41b157b1c6 <_PyEval_EvalFrameDefault+18726>, 0x7f41b157775a <_PyEval_EvalFrameDefault+3770>, 0x7f41b1579c5e <_PyEval_EvalFrameDefault+13246>, 0x7f41b15798f9 <_PyEval_EvalFrameDefault+12377>, 0x7f41b157b572 <_PyEval_EvalFrameDefault+19666>, 0x7f41b1577a08 <_PyEval_EvalFrameDefault+4456>, 0x7f41b1577405 <_PyEval_EvalFrameDefault+2917>, 0x7f41b1578c66 <_PyEval_EvalFrameDefault+9158>, 0x7f41b157b467 <_PyEval_EvalFrameDefault+19399>, 0x7f41b157cba4 <_PyEval_EvalFrameDefault+25348>, 0x7f41b1578063 <_PyEval_EvalFrameDefault+6083>, 0x7f41b157a5e5 <_PyEval_EvalFrameDefault+15685>, 0x7f41b1576e8a <_PyEval_EvalFrameDefault+1514>, 0x7f41b1579738 <_PyEval_EvalFrameDefault+11928>, 0x7f41b157b6cf <_PyEval_EvalFrameDefault+20015>, 0x7f41b157bab4 <_PyEval_EvalFrameDefault+21012>, 0x7f41b157b78b <_PyEval_EvalFrameDefault+20203>, 0x7f41b1578455 <_PyEval_EvalFrameDefault+7093>, 0x7f41b157813a <_PyEval_EvalFrameDefault+6298>, 0x7f41b157a714 <_PyEval_EvalFrameDefault+15988>, 0x7f41b157d028 <_PyEval_EvalFrameDefault+26504>, 0x7f41b145397f <_PyEval_EvalFrameDefault-1191713>, 0x7f41b1577010 <_PyEval_EvalFrameDefault+1904>, 0x7f41b1579f80 <_PyEval_EvalFrameDefault+14048>, 0x7f41b157738f <_PyEval_EvalFrameDefault+2799>, 0x7f41b1577bba <_PyEval_EvalFrameDefault+4890>, 0x7f41b1578edd <_PyEval_EvalFrameDefault+9789>, 0x7f41b157ebd2 <_PyEval_EvalFrameDefault+33586>, 0x7f41b157adab <_PyEval_EvalFrameDefault+17675>, 0x7f41b157b883 <_PyEval_EvalFrameDefault+20451>, 0x7f41b1577fca <_PyEval_EvalFrameDefault+5930>, 0x7f41b157b9c3 <_PyEval_EvalFrameDefault+20771>, 0x7f41b1576b73 <_PyEval_EvalFrameDefault+723>, 0x7f41b1576d85 <_PyEval_EvalFrameDefault+1253>, 0x7f41b157ec47 <_PyEval_EvalFrameDefault+33703>, 0x7f41b157c1ce <_PyEval_EvalFrameDefault+22830>, 0x7f41b1576b31 <_PyEval_EvalFrameDefault+657>, 0x7f41b157c73c <_PyEval_EvalFrameDefault+24220>, 0x7f41b1578e1e <_PyEval_EvalFrameDefault+9598>, 0x7f41b1579bd6 <_PyEval_EvalFrameDefault+13110>, 0x7f41b157e1ad <_PyEval_EvalFrameDefault+30989>, 0x7f41b1579e9d <_PyEval_EvalFrameDefault+13821>, 0x7f41b157a7dd <_PyEval_EvalFrameDefault+16189>, 0x7f41b157aeb7 <_PyEval_EvalFrameDefault+17943>, 0x7f41b1576e46 <_PyEval_EvalFrameDefault+1446>, 0x7f41b1579e31 <_PyEval_EvalFrameDefault+13713>, 0x7f41b157c36d <_PyEval_EvalFrameDefault+23245>, 0x7f41b157984d <_PyEval_EvalFrameDefault+12205>, 0x7f41b157b4f7 <_PyEval_EvalFrameDefault+19543>...}
word = <optimized out>
word = <optimized out>
#11 0x00007f41b16522c9 in PyEval_EvalCode (co=0x7f41b102dde0, globals=<optimized out>, locals=0x7f41b0e5c080) at Python/ceval.c:604
tstate = 0x7f41b1936df0 <_PyRuntime+283024>
builtins = <optimized out>
desc = {fc_globals = 0x7f41b0e5c080, fc_builtins = 0x7f41b1031dc0, fc_name = 0x7f41b18fa438 <_PyRuntime+34776>, fc_qualname = 0x7f41b18fa438 <_PyRuntime+34776>, fc_code = 0x7f41b102dde0, fc_defaults = 0x0, fc_kwdefaults = 0x0, fc_closure = 0x0}
func = 0x7f41b1059440
res = <optimized out>
#12 0x00007f41b169088c in run_eval_code_obj (tstate=tstate@entry=0x7f41b1936df0 <_PyRuntime+283024>, co=co@entry=0x7f41b102dde0, globals=globals@entry=0x7f41b0e5c080, locals=locals@entry=0x7f41b0e5c080) at Python/pythonrun.c:1381
v = <optimized out>
has_builtins = <optimized out>
#13 0x00007f41b168d85d in run_mod (mod=mod@entry=0x556a33244eb0, filename=filename@entry=0x7f41b0e5c1b0, globals=globals@entry=0x7f41b0e5c080, locals=locals@entry=0x7f41b0e5c080, flags=flags@entry=0x7ffc67c65988, arena=arena@entry=0x7f41b0fa3cd0, interactive_src=0x0, generate_new_source=0) at Python/pythonrun.c:1466
tstate = 0x7f41b1936df0 <_PyRuntime+283024>
interactive_filename = <optimized out>
co = 0x7f41b102dde0
v = <optimized out>
#14 0x00007f41b168af58 in pyrun_file (fp=fp@entry=0x556a33176350, filename=filename@entry=0x7f41b0e5c1b0, start=start@entry=257, globals=globals@entry=0x7f41b0e5c080, locals=locals@entry=0x7f41b0e5c080, closeit=closeit@entry=1, flags=0x7ffc67c65988) at Python/pythonrun.c:1295
arena = 0x7f41b0fa3cd0
mod = <optimized out>
ret = <optimized out>
#15 0x00007f41b168a212 in _PyRun_SimpleFileObject (fp=fp@entry=0x556a33176350, filename=filename@entry=0x7f41b0e5c1b0, closeit=closeit@entry=1, flags=flags@entry=0x7ffc67c65988) at Python/pythonrun.c:517
ret = <optimized out>
main_module = 0x7f41b0e35c10
dict = 0x7f41b0e5c080
set_file_name = 1
has_file = <optimized out>
pyc = <optimized out>
v = <optimized out>
#16 0x00007f41b1689b83 in _PyRun_AnyFileObject (fp=fp@entry=0x556a33176350, filename=filename@entry=0x7f41b0e5c1b0, closeit=closeit@entry=1, flags=flags@entry=0x7ffc67c65988) at Python/pythonrun.c:77
decref_filename = 0
res = <optimized out>
#17 0x00007f41b1687e51 in pymain_run_file_obj (program_name=0x7f41b0e5c1f0, filename=0x7f41b0e5c1b0, skip_source_first_line=0) at Modules/main.c:410
fp = 0x556a33176350
sb = {st_dev = 2063, st_ino = 11010310, st_nlink = 1, st_mode = 33188, st_uid = 1000, st_gid = 1000, __pad0 = 0, st_rdev = 0, st_size = 92, st_blksize = 4096, st_blocks = 8, st_atim = {tv_sec = 1760757095, tv_nsec = 167296131}, st_mtim = {tv_sec = 1760757095, tv_nsec = 167296131}, st_ctim = {tv_sec = 1760757095, tv_nsec = 207295590}, __glibc_reserved = {0, 0, 0}}
cf = {cf_flags = 0, cf_feature_version = 13}
run = <optimized out>
#18 pymain_run_file (config=0x7f41b19094e8 <_PyRuntime+96392>) at Modules/main.c:429
filename = 0x7f41b0e5c1b0
program_name = 0x7f41b0e5c1f0
res = <optimized out>
#19 pymain_run_python (exitcode=0x7ffc67c6597c) at Modules/main.c:696
main_importer_path = <optimized out>
interp = 0x7f41b19075b0 <_PyRuntime+88400>
config = 0x7f41b19094e8 <_PyRuntime+96392>
path0 = 0x7f41b0e57b70
#20 Py_RunMain () at Modules/main.c:775
exitcode = 0
#21 0x00007f41b163fbeb in Py_BytesMain (argc=<optimized out>, argv=<optimized out>) at Modules/main.c:829
args = {argc = 2, use_bytes_argv = 1, bytes_argv = 0x7ffc67c65be8, wchar_argv = 0x0}
#22 0x00007f41b1218675 in __libc_start_call_main (main=main@entry=0x556a1df1a120 <main>, argc=argc@entry=2, argv=argv@entry=0x7ffc67c65be8) at ../sysdeps/nptl/libc_start_call_main.h:58
self = <optimized out>
result = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, 7599395484873294775, 140722049539048, 2, 139920129609728, 93914257280448, 7599395484829254583, 7497882195609682871}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x7ffc67c65be8}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
not_first_call = <optimized out>
#23 0x00007f41b1218729 in __libc_start_main_impl (main=0x556a1df1a120 <main>, argc=2, argv=0x7ffc67c65be8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffc67c65bd8) at ../csu/libc-start.c:360
No locals.
#24 0x0000556a1df1a045 in _start ()
No symbol table info available.
Probably the problem is not in pillow?
Thanks very much. Please provide a link to the gitlab.archlinux.org issue when you have created it.
Link to Arch Linux issue: https://gitlab.archlinux.org/archlinux/packaging/packages/python-pillow/-/issues/4
As an update, discussion in the Arch Linux issue suggests that this might be a pymupdf issue instead.
The thread has since moved to mupdf - https://gitlab.archlinux.org/archlinux/packaging/packages/mupdf/-/issues/18
If I use pacman -Sy --noconfirm python-pillow python-pymupdf to install both packages from Arch Linux, then I see a segfault - https://github.com/radarhere/docker-images/actions/runs/19292792113/job/55167267465
If I install Pillow from pip, I don't - https://github.com/radarhere/docker-images/actions/runs/19292808895/job/55167323900
If I install PyMuPDF from pip, I don't - https://github.com/radarhere/docker-images/actions/runs/19292827832/job/55167384805
Going through your trace, Pillow would call opj_stream_create. Looking at https://fossies.org/dox/mupdf-1.26.10-source/load-jpx_8c_source.html, I suspect I've found how opj_stream_create connects to the next item in your trace, fz_calloc_no_throw - it calls opj_calloc.
void *opj_calloc(size_t n, size_t size)
{
fz_context *ctx = get_opj_context();
assert(ctx != NULL);
return fz_calloc_no_throw(ctx, n, size);
}
So I think the problem is that the pymupdf Arch Linux package is changing the normal operation of OpenJPEG, and then that is re-used by the Arch Linux package of Pillow, and causes the segfault.
I don't think Pillow can be held responsible for the fact that OpenJPEG has this unexpected call to fz_calloc_no_throw inserted into the mix. It seems unlikely that Pillow is making any incorrect calls to OpenJPEG, and far more likely that https://gitlab.archlinux.org/archlinux/packaging/packages/python-pymupdf needs to isolate its modifications of OpenJPEG from the rest of the ecosystem.
Over at https://gitlab.archlinux.org/archlinux/packaging/packages/python-pillow/-/issues/4, you reported
This only happens if python-pillow and python-pymupdf is installed from Arch repository, does not happen if I install them from pip.
Did you want to reconsider your comment earlier in this thread? https://github.com/python-pillow/Pillow/issues/9267#issuecomment-3420377733
Same problem if I use pip install --no-binary :all: pillow to install.
https://github.com/pymupdf/PyMuPDF/issues/4762 has led to https://bugs.ghostscript.com/show_bug.cgi?id=708929
Looks like importing pymupdf loads mupdf's openjpeg into current process, then importing and using Pillow uses mupdf's openjpeg instead of the system openjpeg. This fails, possibly because
mupdf:source/fitz/load-jpx.c:opj_secretis null until mupdf uses its openjpeg.
I have an application that segfaulted on loading images from a byte array on Linux Mint 22.1 but works no problemo with Ubuntu 25.04, pillow 12.0.0 on both setups. I rewrote the program to not use Pillow but instead reading the byte array into a PyQt6 QPixmap and now it works on all machines tested.
Here's a cut out from the code that segfaulted:
import mutagen
from PIL import Image, ImageQt
_f = mutagen.File(_obj.file)
_data = _f.tags["APIC:Cover"].data
_image = Image.open(BytesIO(_data))
_cover = QPixmap.fromImage(ImageQt(_image)) # < SEGFAULT
This works:
_obj.image = f.tags["APIC:Cover"].data
_pxmap = QPixmap()
_pxmap.loadFromData(playable.image)
_cover = _pxmap.scaled(120, 120,
Qt.AspectRatioMode.KeepAspectRatio,
Qt.TransformationMode.SmoothTransformation)
This issue is the closest I've got to get an understanding of my problem, but may be unrelated.
The error in this issue specifically relates to mupdf.
If you'd like help investigating your problem, please create a new issue. It would be great if you could include a stacktrace, or a Dockerfile that demonstrates the segfault.
https://bugs.ghostscript.com/show_bug.cgi?id=708929 is apparently fixed in https://cgit.ghostscript.com/cgi-bin/cgit.cgi/mupdf.git/commit/?id=b54895c66776765277299606a3e87f5f1bf1688e
The next step would be waiting for another mupdf release.
Testing with a recent mirror, I find that this is now resolved - https://github.com/radarhere/docker-images/actions/runs/20131615275
FROM greyltc/archlinux
RUN echo "Server = https://plug-mirror.rcac.purdue.edu/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist
RUN pacman -Sy --noconfirm --overwrite "*libedit*,*readline.h,*histedit.h" libedit
RUN pacman -Sy --noconfirm python-pillow python-pymupdf
ADD test.jp2 /test.jp2
RUN python3 -c "import pymupdf;from PIL import Image;image1 = Image.open('test.jp2');image1.save('out.png')"
Closing this issue as no feedback has been received.