[Reproducible-builds] Bug#784891: crashes comparing text files: TypeError: must be string, not list

Helmut Grohne helmut at subdivi.de
Sun May 10 08:11:54 UTC 2015


Package: debbindiff
Version: 18
User: helmutg at debian.org
Usertags: rebootstrap

>From a recent jenkins build:
| https://jenkins.debian.net/job/rebootstrap_s390x_gcc49_nobiarch_debbindiff/18/console
| Get:1 http://ftp.de.debian.org/debian/ sid/main gzip s390x 1.6-4 [111 kB]
| Fetched 111 kB in 0s (1337 kB/s)
| Traceback (most recent call last):
|   File "/usr/bin/debbindiff", line 120, in <module>
|     sys.exit(main())
|   File "/usr/bin/debbindiff", line 106, in main
|     parsed_args.file1, parsed_args.file2)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
|     return comparator(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/utils.py", line 43, in with_fallback
|     inside_differences = original_function(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/deb.py", line 53, in compare_deb_files
|     in_path1, in_path2, source=name))
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
|     return comparator(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/utils.py", line 43, in with_fallback
|     inside_differences = original_function(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/xz.py", line 50, in compare_xz_files
|     source=[os.path.basename(new_path1), os.path.basename(new_path2)])
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
|     return comparator(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/utils.py", line 43, in with_fallback
|     inside_differences = original_function(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/tar.py", line 65, in compare_tar_files
|     source=name.decode('utf-8')))
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
|     return comparator(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/utils.py", line 43, in with_fallback
|     inside_differences = original_function(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/gzip.py", line 64, in compare_gzip_files
|     source=[os.path.basename(new_path1), os.path.basename(new_path2)]))
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/__init__.py", line 129, in compare_files
|     return comparator(path1, path2, source)
|   File "/usr/lib/python2.7/dist-packages/debbindiff/comparators/text.py", line 29, in compare_text_files
|     file1 = codecs.open(path1, 'r', encoding=encoding)
|   File "/usr/lib/python2.7/codecs.py", line 887, in open
|     info = lookup(encoding)
| TypeError: must be string, not list
| rebootstrap-error: debbindiff terminated with abnormal exit code 2

In comparators.text, compare_text_files is defined as:

| def compare_text_files(path1, path2, encoding, source=None):

It is called at comparators/__init__.py:129 as:

| return comparator(path1, path2, source)

So it seems that the source variable there becomes the encoding
parameter in compare_text_files, which seems strange at least.

Now compare_text_files did have this signature from the very beginning
and in a few places, it is called with that encoding explicitly. However
it also shows up in the COMPARATORS list in comparators/__init__.py. The
functions there are generally expected to be callable without the
encoding parameter.

Cc-ing Reiner Herrmann as he recently touched that code.

Hope this helps in dissecting.

Helmut



More information about the Reproducible-builds mailing list