Package: sawfish
Version: 1:1.11.90-1.1
Architecture: i386

The i386 version of the 'sawfish' package installs a file called
/usr/lib/i386-linux-gnu/sawfish/DOC, which file(1) thinks is in dbm
format, but which appears to be corrupt in some way, according to more
than one dbm-reading program:

$ file DOC
DOC: GNU dbm 1.x or ndbm database, little endian, old
$ gdbm_dump DOC
gdbm_dump: gdbm_open failed: Unexpected end of file
$ python
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import anydbm
>>> anydbm.open("DOC")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/anydbm.py", line 85, in open
    return mod.open(file, flag, mode)
gdbm.error: Unexpected end of file

The visible effect of this is that sawfish:i386 can fail to bring up its
GUI configuration panel, printing a stack trace into ~/.xsession-errors
along the lines of

Lisp backtrace:
#7   gdbm-open ...
#6   doc-file-ref ...
#5   documentation ...
#4   nokogiri-report-slot ...
#3   nokogiri-report-slots ((introduction introduction-link introduction-edit 
introduction-info))
#2   eval ...
#1   user-eval ...
#0   server-eval ...

However this is all fine on amd64. sawfish:amd64 can open its GUI
configurer successfully, and the corresponding file in that package,
namely /usr/lib/x86_64-linux-gnu/sawfish/DOC, seems to be fine:

$ file DOC
DOC: GNU dbm 1.x or ndbm database, little endian, old
$ gdbm_dump DOC | head
# GDBM dump file created by GDBM version 1.14.1. 03/01/2018 on Tue Jun 19 
11:42:13 2018
#:version=1.0
#:file=DOC
#:uid=1000,user=simon,gid=1000,group=simon,mode=644
# End of header
#:count=1
# End of data

I did these tests on an amd64 installation, but I don't believe it's due
to any architecture-specific formatting of dbm files (should there be
any), because I get the same results whether I use the gdbm_dump binary
from gdbmtool:i386 or the one from gdbmtool:amd64.

Cheers,
Simon

-- 
for k in [pow(x,37,0x1a1298d262b49c895d47f) for x in [0x50deb914257022de7fff,
0x213558f2215127d5a2d1, 0x90c99e86d08b91218630, 0x109f3d0cfbf640c0beee7,
0xc83e01379a5fbec5fdd1, 0x19d3d70a8d567e388600e, 0x534e2f6e8a4a33155123]]:
 print("".join([chr(32+3*((k>>x)&1))for x in range(79)])) # <ana...@pobox.com>

Reply via email to