mod_perl unhappy with libxml-parser-perl
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.
Reply to: