Daniel, I have modified the patch and run some tests under various conditions to make sure the results are what I expected to be correct. I modified, but otherwise kept, the initial change setting the local variable as it's easier to check for an empty string than determine what URL the current file is and try comparing that to the include URL. Right before the stack check I added an additional check where if local and xml I checked for a non-null and non-empty fragment. If the fragment is empty for a local xml include I give a recursive error. I was a little unsure about the error so please change to something more appropriate if needed. This should fill the general gap of enforcing the optional href needing a fragment according to the spec. Chris ----- Original Message ---- From: Daniel Veillard <veillard redhat com> To: Chris Ryan <xgbe yahoo com> Cc: xml gnome org Sent: Wednesday, February 6, 2008 9:14:57 AM Subject: Re: [xml] Bug/Patch in xinclude when using empty href On Tue, Feb 05, 2008 at 05:56:14AM -0800, Chris Ryan wrote:
Hello All,
I've been working with libxml2 and xsltproc to process docbook files. The editor that we use creates xinclude tags that use empty href tags when referring to the same file. The problem I am encountering is that when using xmllint, or the library in general, in this scenario it warns about a recursion. I've attached a sample xml file for demonstration. Running 'xmllint --xinclude a.xml' will produce the following error:
a.xml:3: element include: XInclude error : detected a recursion in a.xml
I was able to determine that the URI was being correctly calculated but that the code was not setting the local flag when the href was empty while it was doing so for a missing href or an href starting with a # character. I added an additional statement in xinclude.c to check for an empty href and set local to a true value and it corrected the problem. I have attached a diff file showing the change for convenience.
I
used
the
latest
version,
2.6.31,
for
all
my
testing
and
changes.
I
also
checked
the
xinclude
spec
to
make
sure
this
was
indeed
the
intended
behavior.
Your
consideration
on
this
issue
and
submission
is
greatly
appreciated.
Well,
the
'local'
test
is
a
bit
of
a
hack,
reusing
it
is
fair,
but
the
problem
is
that
it's
okay
to
set
it
if
href=""
only
if
there
is
also
an
xpointer
attribute.
I
think
the
patch
is
incomplete
without
that
test,
could
you
extend
it
?
The
change
can
probably
be
moved
just
before
if
((!local)
&&
(xml
==
1))
{
and
extended
to
check
for
the
fragment
value,
Daniel
--
Red
Hat
Virtualization
group
http://redhat.com/virtualization/
Daniel
Veillard
|
virtualization
library
http://libvirt.org/
veillard redhat com
|
libxml
GNOME
XML
XSLT
toolkit
http://xmlsoft.org/
http://veillard.com/
|
Rpmfind
RPM
search
engine
http://rpmfind.net/
____________________________________________________________________________________
Looking for last minute shopping deals?
Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shoppingAttachment:
xinclude_c.diff
Description: Binary data