[xml] Bug in xmlSchemaValidateOneElement function



I've tried to validate the XML document defined in RFC 4479 section 7.1

( http://tools.ietf.org/html/rfc4479#section-7.1 ) with the schema defined

in section 5.1.2 ( http://tools.ietf.org/html/rfc4479#section-5.1.2 ).


This failed with the error:

element presence: Schemas validity error : Element '{urn:ietf:params:xml:ns:pidf}presence':

No matching global declaration available for the validation root.


I've thought that this happens because there is no 'presence' element

defined in the above schema. So, I have tried to scan the document and

validate each element with the "urn:ietf:params:xml:ns:pidf:data-model"

namespace using the xmlSchemaValidateOneElement function. But when I

have called this function with the first "dm:deviceID" element, the

function failed with the same error message.


I've tried to search the net for more information on xmlSchemaValidateOneElement

but I couldn't find too much. So, I had a look in the source code of

libxml 2.7.3 and I have noticed this strange thing in xmlschemas.c:


In function xmlSchemaValidateOneElement on line 28002 the following attribution is made


ctxt->validationRoot = elem;


Then xmlSchemaVStart function is called. This function calls the xmlSchemaVDocWalk function.

xmlSchemaVDocWalk, on line 27723 overwrites the validationRoot with the root of the document.


27716: valRoot = xmlDocGetRootElement(vctxt->doc);


27723: vctxt->validationRoot = valRoot;


So it seems that xmlSchemaValidateOneElement always validates the root element of the document

( this means it validates the entire document )


I've tried to see if there is a path to call xmlSchemaVDocWalk without initializing

the validationRoot. I have found one more path through xmlSchemaValidateDoc, but also,

on line 28031 the validationRoot is initialized.


The next thing that I have tried was to remove the reinitialization of validationRoot

from xmlSchemaVDocWalk on line 27723. After doing this, I could succesifully validate

the elements from "urn:ietf:params:xml:ns:pidf:data-model" namespace.


Is this a bug, or an intended behaviour?



Tiberius Duluman

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