[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: