Hi Markus, Yes, stable branches are supposed to be ABI compatible and this is definitely an error on my part. I'm not quite sure what I was thinking when I made that change, tbh. :/
I will be releasing 1.10.3 later today with the change below. -Jack On Tue, Jul 10, 2012 at 11:59:40AM +0200, Markus Wanner wrote: > Jack, > > as Francis Russel pointed out on the Debian packaging mailing list for > monotone, it looks like Botan 1.10.2 broke ABI compatibility compared to > 1.10.1, see here: > http://lists.nongnu.org/archive/html/monotone-debian/2012-07/msg00000.html > > I could reproduce this and think I identified the cause. The culprit > seems to be rev 430a859e2a1e7c0ea47beef7d399a45e8ed9ed9a, with > changelog: "Use initializer list, make destructor virtual". I think this > adds the destructor to the vtable of the object MemoryRegion and thus > represents an ABI-incompatible change - of an object that's quite > heavily used, so mtn breaks even for things as simple as `mtn version`. > > The attached patch against the most recent revision in the 1.10 branch > reverts that virtualization of the destructor and thus fixes the issue > (i.e. monotone compiled against 1.10.1 runs fine with a recent .so > library of botan-1.10 with that patch). > > Can you please comment on whether or not this is a safe fix? A quick > `./check --test` seems to run through just fine. > > IIRC the stable patch releases of Botan are supposed to be ABI > compatible. If that's the case, how do you want to deal with this issue? > Mark 1.10.2 as broken and release a 1.10.3 soon? > > Regards > > Markus Wanner > # > # old_revision [2bf8ad2c501213efb4cf9b219330b87666988e91] > # > # patch "src/alloc/secmem.h" > # from [ea3aff086ed1a1f49ee8a0e877ba755dc575e6b4] > # to [746a95d28216664a4e6c945ba32663cea6023ae5] > # > ============================================================ > --- src/alloc/secmem.h ea3aff086ed1a1f49ee8a0e877ba755dc575e6b4 > +++ src/alloc/secmem.h 746a95d28216664a4e6c945ba32663cea6023ae5 > @@ -164,7 +164,7 @@ class MemoryRegion > */ > void swap(MemoryRegion<T>& other); > > - virtual ~MemoryRegion() { deallocate(buf, allocated); } > + ~MemoryRegion() { deallocate(buf, allocated); } > protected: > MemoryRegion() : buf(0), used(0), allocated(0), alloc(0) {} > > _______________________________________________ > botan-devel mailing list > [email protected] > http://lists.randombit.net/mailman/listinfo/botan-devel _______________________________________________ Monotone-debian mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/monotone-debian
