Package: libbobcat6
Version: 6.15.01-1
Severity: serious
Justification: Policy 8.6.2 (ABI change without soname bump), breaks filtermail
Control: affects -1 filtermail

Hi,

Between 6.11 and 6.15, bobcat removed the out-of-line special member
functions of FBB::Pattern. In 6.11 these were defined in pattern/destructor.cc,
destroy.cc, etc.; in 6.15 the class no longer declares them, so they are
implicitly generated in each user. The library soname is still libbobcat.so.6,
so binaries built against the older headers still reference the old symbols,
and some of those are no longer exported by libbobcat.so.6.15.01.

In total, 37 dynamic symbols exported by 6.11.00 are gone in 6.15.01, among them:

  FBB::Pattern::Pattern(FBB::Pattern&&)
  FBB::Pattern::operator=(FBB::Pattern&&)
  FBB::Pattern::operator=(FBB::Pattern const&)
  FBB::Pattern::copy(FBB::Pattern const&)
  FBB::Pattern::destroy()

Impact in unstable/forky: filtermail 1.07.01-1 (built in April against an
older libbobcat-dev) is linked with BIND_NOW and does not start with
libbobcat6 6.15.01-1:

  $ filtermail --help
  filtermail: symbol lookup error: filtermail: undefined symbol: _ZN3FBB7PatternaSEOS0_

(_ZN3FBB7PatternaSEOS0_ = FBB::Pattern::operator=(FBB::Pattern&&))

I checked the other packages linking libbobcat6 in unstable (bisonc++, flexc++, gpg-remailer, guncat, multispeech, natlog, oxref, simrisc, ssh-cron, stealth,
xd). Against the Debian 6.15.01-1 library they currently only need weak
references or symbols that are still exported, so filtermail is the only
binary I found failing. That is partly luck: FBB::Pattern::~Pattern() is no
longer defined in the 6.15 sources but is still exported by the Debian build.
In Ubuntu, which builds with -flto=auto, ~Pattern() is not exported, and
flexc++, bisonc++, gpg-remailer, oxref and stealth also fail with
"undefined symbol: _ZN3FBB7PatternD1Ev".

A no-change rebuild of filtermail (and flexc++) against libbobcat-dev 6.15.01-1 fixes this: the rebuilt binaries no longer reference those symbols and run fine.

Possible fixes:
 - bump the soname (libbobcat7) for this ABI change, or
 - binNMU the reverse dependencies (at least filtermail) and add
   Breaks: filtermail (<< 1.07.01-1+b1) (and the others if needed) to
   libbobcat6, so that old binaries cannot be combined with 6.15.
A symbols file for libbobcat6 would help catch such changes in the future.

Thanks,

Reply via email to