1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-26 00:37:43 +03:00
Files
libxml2/result/XPath/tests/simplebase
Nick Wellnhofer 40f5852149 Fix axis traversal from attribute and namespace nodes
When traversing the "preceding" axis from an attribute node, we must
first go up to the attribute's containing element. Otherwise, text
children of other attributes could be returned. This made it possible
to hit a code path in xmlXPathNextAncestor which contained another bug:
The attribute node was initialized with the context node instead of the
current node. Normally, this code path is only hit via
xmlXPathNextAncestorOrSelf in which case the current and context node
are the same.

The combination of the two bugs could result in an infinite loop, found
with libFuzzer.

Traversing the "following" and the "preceding" axis from namespace nodes
should be handled similarly. This wasn't supported at all previously.
2017-05-31 14:57:46 +02:00

133 lines
2.8 KiB
Plaintext

========================
Expression: /child::*
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /child::EXAMPLE
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /child::EXAMPLE/child::head
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT head
========================
Expression: /child::EXAMPLE/child::*
Object is a Node Set :
Set contains 2 nodes:
1 ELEMENT head
2 ELEMENT chapter
========================
Expression: /child::EXAMPLE/child::head/child::title
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT title
========================
Expression: /child::EXAMPLE/child::head/child::title/child::text()
Object is a Node Set :
Set contains 1 nodes:
1 TEXT
content=Welcome to Gnome
========================
Expression: /child::EXAMPLE/child::head/node()
Object is a Node Set :
Set contains 3 nodes:
1 TEXT
content=
2 ELEMENT title
3 TEXT
content=
========================
Expression: /child::EXAMPLE/attribute::prop1/self::node()
Object is a Node Set :
Set contains 1 nodes:
1 ATTRIBUTE prop1
TEXT
content=gnome is great
========================
Expression: /child::EXAMPLE/attribute::prop1/self::*
Object is a Node Set :
Set contains 0 nodes:
========================
Expression: /child::EXAMPLE/attribute::prop1/descendant-or-self::node()
Object is a Node Set :
Set contains 1 nodes:
1 ATTRIBUTE prop1
TEXT
content=gnome is great
========================
Expression: /child::EXAMPLE/attribute::prop1/descendant-or-self::*
Object is a Node Set :
Set contains 0 nodes:
========================
Expression: /child::EXAMPLE/attribute::prop1/ancestor-or-self::node()
Object is a Node Set :
Set contains 3 nodes:
1 /
2 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
3 ATTRIBUTE prop1
TEXT
content=gnome is great
========================
Expression: /child::EXAMPLE/attribute::prop1/ancestor-or-self::*
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT EXAMPLE
ATTRIBUTE prop1
TEXT
content=gnome is great
ATTRIBUTE prop2
TEXT
content=& linux too
========================
Expression: /descendant::title
Object is a Node Set :
Set contains 2 nodes:
1 ELEMENT title
2 ELEMENT title
========================
Expression: /descendant::p/ancestor::chapter
Object is a Node Set :
Set contains 1 nodes:
1 ELEMENT chapter
========================
Expression: /child::EXAMPLE/attribute::prop2/preceding::text()
Object is a Node Set :
Set contains 0 nodes: