qrtools.py calls tostring() instead of tobytes()
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QR Tools |
New
|
Undecided
|
Unassigned | ||
python-qrtools (Ubuntu) |
New
|
Undecided
|
Unassigned |
Bug Description
The bug is exposed by the program qtqr, but the root cause is an apparent mismatch between python-qrtools and python-pil that can be fixed with a one-line patch to qrtools.py in python-qrtools.
Below I've given the output of enough commands to fully reproduce my setup. You can use xxd -r to create the same PNG that I used, or you can make your own with qtqr (it won't matter).
$ uname -prs
Linux 4.4.0-21-generic x86_64
$ lsb_release -rd
Description: Ubuntu 16.04 LTS
Release: 16.04
# This is a test QR code that I created with qtqr; as seen below, the content is just "test".
$ xxd test.png
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
00000010: 0000 0057 0000 0057 0103 0000 004b 064b ...W...W.....K.K
00000020: 2f00 0000 0650 4c54 4500 0000 ffff ffa5 /....PLTE.......
00000030: d99f dd00 0000 0274 524e 53ff ffc8 b5df .......tRNS.....
00000040: c700 0000 0970 4859 7300 000b 1200 000b .....pHYs.......
00000050: 1201 d2dd 7efc 0000 00ba 4944 4154 388d ....~.....IDAT8.
00000060: cdd3 3b0e c320 0c00 5057 1db2 e504 96b8 ..;.. ..PW......
00000070: 86b7 5c89 5c20 a827 e895 d87c 8d48 bd00 ..\.\ .'...|.H..
00000080: 6c0c 48ae 53a5 c942 ccd8 7a7a 832d 7f10 l.H.S..B..zz.-..
00000090: 2067 c05f 3801 2c84 00ce 7096 ba40 0d62 g._8.,...p..@.b
000000a0: 3aa2 27f4 43c7 0bd5 ae03 63c7 a24d f198 :.'.C.....c..M..
000000b0: a169 9d7f e673 97a6 3512 b9e3 264d a701 .i...s..5...&M..
000000c0: 00d6 c096 85ef 4fae e367 b62b e758 03bb ......O..g.+.X..
000000d0: 3489 e5b2 adb0 e75f 3811 8e03 0289 618d 4......_8.....a.
000000e0: 5c5e 393a c37a 074f eb5e 7b61 6d3a c77b \^9:.z.O.^{am:.{
000000f0: fede b66d 7d5f 583d 751c b4a4 88ed 99dd ...m}_X=u.......
00000100: 839d 654d e61a 8a18 dee6 9ff0 569c e15f ..eM........V.._
00000110: fdb5 b6df 4296 b3b4 dc52 71ee 0000 0000 ....B....Rq.....
00000120: 4945 4e44 ae42 6082 IEND.B`.
$ apt-cache policy zbar-tools
zbar-tools:
Installed: 0.10+doc-10ubuntu1
Candidate: 0.10+doc-10ubuntu1
Version table:
*** 0.10+doc-10ubuntu1 500
500 http://
100 /var/lib/
$ zbarimg test.png
QR-Code:test
scanned 1 barcode symbols from 1 images in 0.01 seconds
$ apt-cache policy qtqr
qtqr:
Installed: 1.4~bzr21-1
Candidate: 1.4~bzr21-1
Version table:
*** 1.4~bzr21-1 500
500 http://
500 http://
100 /var/lib/
$ qtqr
### Manually select "Decode" and then "Decode from File" and choose test.png (or any PNG containing a QR code); the operation fails, and the following is printed on the console by qtqr:
/usr/lib/
'to RGBA images')
Traceback (most recent call last):
File "/usr/bin/qtqr", line 540, in decodeFile
if qr.decode():
File "/usr/lib/
raw = pil.tostring()
File "/usr/lib/
"Please call tobytes() instead.")
Exception: tostring() has been removed. Please call tobytes() instead.
$ dpkg --search /usr/lib/
python-qrtools: /usr/lib/
$ apt-cache policy python-qrtools
python-qrtools:
Installed: 1.4~bzr21-1
Candidate: 1.4~bzr21-1
Version table:
*** 1.4~bzr21-1 500
500 http://
500 http://
100 /var/lib/
$ dpkg --search /usr/lib/
python-pil:amd64: /usr/lib/
$ apt-cache policy python-pil
python-pil:
Installed: 3.1.2-0ubuntu1
Candidate: 3.1.2-0ubuntu1
Version table:
*** 3.1.2-0ubuntu1 500
500 http://
100 /var/lib/
Based on the code at Image.py:695, the call to tostring() is obviously an error; I've confirmed that the following patch fixes the problem.
$diff --git a/qrtools.py.orig b/qrtools.py.fixed
index 3e98469..68546e4 100644
--- a/qrtools.py.orig
+++ b/qrtools.py.fixed
@@ -178,7 +178,7 @@ class QR(object):
# obtain image data
pil = Image.open(
width, height = pil.size
- raw = pil.tostring()
+ raw = pil.tobytes()
# wrap image data
image = zbar.Image(width, height, 'Y800', raw)
# scan the image for barcodes
When this patch is applied to /usr/lib/
Apparently nobody uses qtqr (not even the developers); otherwise this bug wouldn't have been ignored for over a year.
How do I petition to get this broken package removed from the distribution?