DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3683>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3683 Summary: Access violation when performing custom schema validation Product: Xerces-C++ Version: 1.5.1 Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: Other Component: Validating Parser (Schema) (Xerces 1.5 or up only) AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I get an access violation when attempting to perform DOM validation of an XML against a schema using a custom schema validation class. I get the same error even if I make my custom validation class the base SchemaValidator class: SchemaValidator* myValidator = new SchemaValidator; DOMParser parser( myValidator ); The access violation occurs in XMLStringPool::getId() method, it doesn't seem to handle NULL toFind parameters. The method is invoked from the XMLScanner::scanStartTagNS() method to obtain the element (no prefix). The fGrammar->getTargetNamespace() method used returns NULL, so the fURIStringPool- >getId() produces an access violation within the XMLStringPool::getId() method (in the while loop on *curCh). The following call stack traces the error: XMLString::hash(const unsigned short * const 0x00000000, const unsigned int 109) line 1083 HashXMLCh::getHashVal(const void * const 0x00000000, unsigned int 109) line 70 + 13 bytes RefHashTableOf<XMLStringPool::PoolElem>::findBucketElem(const void * const 0x00000000, unsigned int & 1244056) line 273 + 27 bytes RefHashTableOf<XMLStringPool::PoolElem>::get(const void * const 0x00000000) line 220 + 16 bytes XMLStringPool::getId(const unsigned short * const 0x00000000) line 174 + 15 bytes XMLScanner::scanStartTagNS(unsigned char & 1) line 2898 + 87 bytes XMLScanner::scanContent(const unsigned char 0) line 1512 XMLScanner::scanDocument(const InputSource & {...}, const unsigned char 0) line 374 + 10 bytes XMLScanner::scanDocument(const unsigned short * const 0x007d78a0, const unsigned char 0) line 321 XMLScanner::scanDocument(const char * const 0x007d1430, const unsigned char 0) line 330 DOMParser::parse(const char * const 0x007d1430, const unsigned char 0) line 308 main(int 5, char * * 0x007d13d0) line 205 mainCRTStartup() line 338 + 17 bytes KERNEL32! 77f1ba06() The reason that the fGrammar->getTargetNamespace() method returns NULL is that the namespace hasn't been set. This is only set via use of a TraverseSchema class, done in XMLScanner::resolveSchemaGrammar() method. This, however, is only performed if the current grammar has not been set, or for DTD validation. For custom owner schema validation, the grammar has already been set in XMLScanner::scanReset(). Strangely enough, for a non custom user validator, using schema validation, the XMLScanner::scanReset() method sets the grammar to DTD grammar, regardless of what type of validation is being performed. This ensures that additional DOM parsing is performed in the XMLScanner::resolveSchemaGrammar() method even though schema grammar has been selected. Attached is a copy of my simple XML and XSD: <?xml version="1.0" encoding="UTF-8"?> <ServiceCall xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="My test.xsd"> <MiddlewareHeader version="1.0"> <INF_SVCNAME Row="1"> <INF_SVCNAME_VALUE> LOGIN </INF_SVCNAME_VALUE> </INF_SVCNAME> <INF_VERSIONNO Row="2"> <INF_VERSIONNO_VALUE> 2.0 </INF_VERSIONNO_VALUE> </INF_VERSIONNO> </MiddlewareHeader> </ServiceCall> <?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="ServiceCall"> <xsd:complexType> <xsd:sequence> <xsd:element ref="MiddlewareHeader" minOccurs='1' maxOccurs='1'/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="MiddlewareHeader"> <xsd:complexType> <xsd:sequence> <xsd:element name="INF_SVCNAME" type="INF_SVCNAME" nillable="false"/> <xsd:element name="INF_VERSIONNO" type="INF_VERSIONNO" nillable="false"/> </xsd:sequence> <xsd:attribute name="version" type="xsd:string" use='required'/> </xsd:complexType> </xsd:element> <xsd:complexType name="INF_SVCNAME"> <xsd:sequence> <xsd:element name="INF_SVCNAME_VALUE"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:minLength value="1"/> <xsd:whiteSpace value="preserve"/> <xsd:maxLength value="50"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:sequence> <xsd:attribute name="Row" type="xsd:integer" use="optional"/> </xsd:complexType> <xsd:complexType name="INF_VERSIONNO"> <xsd:sequence> <xsd:element name="INF_VERSIONNO_VALUE"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:minLength value="1"/> <xsd:whiteSpace value="preserve"/> <xsd:maxLength value="50"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:sequence> <xsd:attribute name="Row" type="xsd:integer" use="optional"/> </xsd:complexType> </xsd:schema> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]