I have noticed a conflict between the versions of Expat in apache-perl 1.3.9.10-1.21-6 and libxml-parser-perl 2.27-6 that causes memory corruption. I assume that the DSO apache-1.3.9/libapache-mod-perl 1.21 in potato is similarly affected, as I first started getting segfaults when running under that version.
The problem arises because the "expat-lite" version of the expat library is compiled into apache without defining XML_DTD. The libExpat.so in libxml-parser-perl is compiled with XML_DTD defined, which, among other things, changes the size and composition of various data structures. If an object is allocated by the expat-lite code, accesses to it from the libxml-parser-perl code can clobber memory. I can think of several ways to solve the problem: (1) Delete the expat-lite directory from the Apache build tree, or disable it somehow. Pro: simple. Con: perhaps somebody needs it. (2) Make the expat-lite version compile with XML_DTD defined also, so it is compatible with the libxml-parser-perl version. Pro: saves expat-lite in Apache. Con: fragile; perhaps there are other incompatibilities, even some insoluble ones due to Apache forking Expat. (3) Use preprocessor hackery to rename the symbols in the expat-lite version, so there is no possibility of code mixing and matching. Pro: Solves the Cons of the first two options. Con: more difficult to do, introduces what could be viewed as a gratuitous incompatibility with the mainstream Apache distribution. -- Robert Coie Implementor, Apropos Ltd.