Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bug#1035578: fails to write image with TypeError: write() argument must be str, not bytes

21 views
Skip to first unread message

Antoine Beaupre

unread,
May 5, 2023, 3:40:04 PM5/5/23
to
Package: python3-matplotlib
Version: 3.6.3-1+b1
Severity: important

I have this tiny script which generates a silly graph of cryptographic
primitives here:

https://gitlab.com/anarcat/crypto-bench/-/blob/master/benchdiceware.py

The details are rather irrelevant here, but it eventually does this:

plt.savefig(args.output,
format=args.output.name[-3:])

... which is basically:

plt.savefig("foo.png", "png")

This used to work fine in Python 2. Now that we switched to Python 3,
this explodes with:

anarcat@angela:crypto-bench$ ./benchpasswords.py -o benchdiceware.png
Traceback (most recent call last):
File "/home/anarcat/src/crypto-bench/./benchpasswords.py", line 102, in <module>
render_graph(args.output)
File "/home/anarcat/src/crypto-bench/./benchpasswords.py", line 90, in render_graph
plt.savefig(args.output,
File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 959, in savefig
res = fig.savefig(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 3285, in savefig
self.canvas.print_figure(fname, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/backend_bases.py", line 2338, in print_figure
result = print_method(
^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/matplotlib/backend_bases.py", line 2204, in <lambda>
print_method = functools.wraps(meth)(lambda *args, **kwargs: meth(
^^^^^
File "/usr/lib/python3/dist-packages/matplotlib/_api/deprecation.py", line 410, in wrapper
return func(*inner_args, **inner_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 517, in print_png
self._print_pil(filename_or_obj, "png", pil_kwargs, metadata)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 464, in _print_pil
mpl.image.imsave(
File "/usr/lib/python3/dist-packages/matplotlib/image.py", line 1667, in imsave
image.save(fname, **pil_kwargs)
File "/usr/lib/python3/dist-packages/PIL/Image.py", line 2431, in save
save_handler(self, fp, filename)
File "/usr/lib/python3/dist-packages/PIL/PngImagePlugin.py", line 1307, in _save
fp.write(_MAGIC)
TypeError: write() argument must be str, not bytes
anarcat@angela:crypto-bench[1]$

It looks like matplotlib is calling PIL wrong. Or PIL is wrong itself,
I'm not sure where to lay the blame here...

a.

-- System Information:
Debian Release: 12.0
APT prefers testing-security
APT policy: (500, 'testing-security'), (500, 'testing-debug'), (500, 'stable-security'), (500, 'testing'), (500, 'stable'), (1, 'experimental'), (1, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 6.1.0-7-amd64 (SMP w/16 CPU threads; PREEMPT)
Locale: LANG=fr_CA.UTF-8, LC_CTYPE=fr_CA.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages python3-matplotlib depends on:
ii libc6 2.36-9
ii libfreetype6 2.12.1+dfsg-5
ii libgcc-s1 12.2.0-14
ii libjs-jquery 3.6.1+dfsg+~3.5.14-1
ii libjs-jquery-ui 1.13.2+dfsg-1
ii libqhull-r8.0 2020.2-5
ii libstdc++6 12.2.0-14
ii python-matplotlib-data 3.6.3-1
ii python3 3.11.2-1+b1
ii python3-contourpy 1.0.7-1+b1
ii python3-cycler 0.11.0-1
ii python3-dateutil 2.8.2-2
ii python3-fonttools 4.38.0-1+b1
ii python3-kiwisolver 1.4.4-1+b1
ii python3-numpy [python3-numpy-abi9] 1:1.24.2-1
ii python3-packaging 23.0-1
ii python3-pil 9.4.0-1.1+b1
ii python3-pil.imagetk 9.4.0-1.1+b1
ii python3-pyparsing 3.0.9-1
ii python3-six 1.16.0-4

Versions of packages python3-matplotlib recommends:
ii python3-tk 3.10.8-1

Versions of packages python3-matplotlib suggests:
ii cm-super-minimal 0.3.4-17
pn dvipng <none>
ii ffmpeg 7:5.1.2-3
pn fonts-staypuft <none>
ii ghostscript 10.0.0~dfsg-11
ii gir1.2-gtk-3.0 3.24.37-2
ii inkscape 1.2.2-2+b1
ii ipython3 8.5.0-4
ii librsvg2-common 2.54.5+dfsg-1
pn python3-cairocffi <none>
ii python3-gi 3.42.2-3+b1
ii python3-gi-cairo 3.42.2-3+b1
pn python3-gobject <none>
ii python3-pyqt5 5.15.9+dfsg-1
ii python3-scipy 1.10.1-2
ii python3-sip 4.19.25+dfsg-5+b1
ii python3-tornado 6.2.0-3
pn texlive-extra-utils <none>
ii texlive-latex-extra 2022.20230122-3

-- no debconf information

Sandro Tosi

unread,
May 15, 2023, 2:51:16 AM5/15/23
to
control: reassign -1 python3-pil
the crash is in PIL, so reassigning, and it also seems to be
potentially limited to the PNG format: i've tried with jpg and eps and
they both worked

--
Sandro "morph" Tosi
My website: http://sandrotosi.me/
Me at Debian: http://wiki.debian.org/SandroTosi
Twitter: https://twitter.com/sandrotosi
0 new messages