Package: libgdbm6 Version: 1.18.1-3 Severity: serious Control: block 923238 with -1
GDBM databases created on stretch (gdbm 1.8.3-14) are not compatible with libgdbm in sid/buster (1.18.1-3) on at least the i386 (32-bit x86) architecture, probably also armhf. This means that any local user databases will break on upgrade from stretch to buster. It also breaks a few Debian packages that use GDBM files (known affected are libmarc-charset-perl and command-not-found). Bug #910911 discussed a similar problem that applied to all architectures. It seems probable that the fix for that never worked on i386 but this was just not detected earlier. The incompatibility was reported recently in bug #923238 and was found because Ubuntu has a better architecture coverage on their autopkgtest setup. Below are steps to reproduce, testing with Python 2, Python 3, and Perl. We make a trivial GDBM database with each, containing just one key "foo" with the value "bar". After upgrading to buster on i386, none of these databases can be read and "Malformed database file header" is reported. On amd64, everything works fine after the upgrade. # start from stretch # apt install python-gdbm python3-gdbm perl python - <<'EOF' import gdbm gdbm.open("py2-stretch.gdbm", "c")["foo"] = "bar" EOF python3 <<'EOF' import dbm.gnu dbm.gnu.open("py3-stretch.gdbm", "c")["foo"] = "bar" EOF perl <<'EOF' use GDBM_File; tie %h, q(GDBM_File), "perl-stretch.gdbm", &GDBM_WRCREAT, 0640 or die "opening GDBM file failed: $!"; $h{foo} = "bar" EOF # ls -l *.gdbm -rw-r----- 1 root root 12294 Mar 2 19:04 perl-stretch.gdbm -rw-r--r-- 1 root root 12294 Mar 2 19:04 py2-stretch.gdbm -rw-r--r-- 1 root root 12294 Mar 2 19:04 py3-stretch.gdbm # upgrade to buster # sed -i s/stretch/buster/ /etc/apt/sources.list && apt update && apt dist-upgrade && apt install gdbmtool # test with gdbmtool # gdbmtool py2-stretch.gdbm fetch foo gdbmtool: stdin:1.1-10: cannot open database py2-stretch.gdbm: Malformed database file header # gdbmtool py3-stretch.gdbm fetch foo gdbmtool: stdin:1.1-10: cannot open database py3-stretch.gdbm: Malformed database file header # gdbmtool perl-stretch.gdbm fetch foo gdbmtool: stdin:1.1-10: cannot open database perl-stretch.gdbm: Malformed database file header # similar results with any of these: perl <<'EOF' use GDBM_File; tie %h, q(GDBM_File), "perl-stretch.gdbm", &GDBM_READER, 0640 or die "opening GDBM file failed: $!"; print $h{foo}, "\n"; EOF python <<'EOF' import gdbm print(gdbm.open("py2-stretch.gdbm", "r")["foo"]) EOF python3 <<'EOF' import dbm.gnu print(dbm.gnu.open("py3-stretch.gdbm", "r")["foo"]) EOF -- Niko Tyni nt...@debian.org