mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-26 00:37:43 +03:00
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.
133 lines
2.8 KiB
Plaintext
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:
|