[Reproducible-builds] Bug#778641: debbindiff --text crashes for xz-utils with a UnicodeDecodeError

Helmut Grohne helmut at subdivi.de
Tue Feb 24 08:02:19 UTC 2015


Control: tags -1 + patch

It seems that currently the lines1 and lines2 lists in a Difference
object can contain str and unicode. This means that:

 * The Difference class has poor API documentation and does not explain
   how it is supposed to be used.
 * Consequently, functions that generate Difference objects do not agree
   what it should contain and choose different interpretations.
 * In particular:
   + control files tend to be unicode.
   + readelf output tends to be str.

The bug results from issuing .encode("utf8") on a str object. When doing
so, it is automatically decoded to unicode using the
sys.getdefaultencoding() (which happens to default to "ascii"). This
class of bugs can be found by:
 * Running debbindiff in the python3 interpreter (if that is feasible
   already).
 * Issuing: "import sys; reload(sys); sys.setdefaultencoding("invalid")"
   after importing all modules. This causes implicit encoding and
   encoding to always fail and it breaks importing and using certain
   builtin modules (which is why setdefaultencoding is normally
   deleted).

Attaching a minimal patch that makes it work somewhat.

Helmut
-------------- next part --------------
diff -Nru debbindiff-9/debbindiff/presenters/text.py debbindiff-9+nmu1/debbindiff/presenters/text.py
--- debbindiff-9/debbindiff/presenters/text.py	2015-02-15 12:13:51.000000000 +0100
+++ debbindiff-9+nmu1/debbindiff/presenters/text.py	2015-02-24 00:50:38.000000000 +0100
@@ -34,7 +34,9 @@
         for line in g:
             if line.startswith('--- ') or line.startswith('+++ '):
                 continue
-            print_func("??? %s" % line.encode('utf-8'), end='')
+            if isinstance(line, unicode):
+                line = line.encode('utf-8')
+            print_func("??? %s" % line, end='')
 
 def print_details(difference, print_func):
     if not difference.details:
diff -Nru debbindiff-9/debian/changelog debbindiff-9+nmu1/debian/changelog
--- debbindiff-9/debian/changelog	2015-02-15 12:13:51.000000000 +0100
+++ debbindiff-9+nmu1/debian/changelog	2015-02-24 08:49:58.000000000 +0100
@@ -1,3 +1,10 @@
+debbindiff (9+nmu1) UNRELEASED; urgency=low
+
+  * Non-maintainer upload.
+  * Work around UnicodeDecodeError in --text. (Closes: #778641)
+
+ -- Helmut Grohne <helmut at subdivi.de>  Tue, 24 Feb 2015 08:49:08 +0100
+
 debbindiff (9) unstable; urgency=medium
 
   [ Chris Lamb ]


More information about the Reproducible-builds mailing list