DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=27898>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=27898 Relative URL resolving broken Summary: Relative URL resolving broken Product: Xerces-C++ Version: 2.5.0 Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: Other Component: Miscellaneous AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Filesystem structure: /a.xml /dtd/a.dtd /ent/a.ent - A dokument (a.xml for example) with an external DTD give (dtd/a.dtd for example). - The DTD declares an external entity (../ent/a.ent for example) - The dokument refers to the entity =>The parser tries to resolve (../ent/a.ent) relative to the path of the document and not to the dtd => That's wrong! The problem - in my opinion - is within the function createReader in internal/ReaderMgr.cpp: XMLReader* ReaderMgr::createReader( const XMLCh* const baseURI , const XMLCh* const sysId , const XMLCh* const pubId , const bool xmlDecl , const XMLReader::RefFrom refFrom , const XMLReader::Types type , const XMLReader::Sources source , InputSource*& srcToFill , const bool calcSrcOfs) { ... if ((!urlTmp.setURL((!baseURI || !*baseURI) ? lastInfo.systemId : baseURI, expSysId.getRawBuffer(), urlTmp)) || (urlTmp.isRelative())) { if (!fStandardUriConformant) srcToFill = new (fMemoryManager) LocalFileInputSource ( lastInfo.systemId // !!!! sould be (!baseURI || !*baseURI) ? lastInfo.systemId : baseURI , expSysId.getRawBuffer() , fMemoryManager ); else ThrowXMLwithMemMgr(MalformedURLException, XMLExcepts::URL_MalformedURL, fMemoryManager); } ... } This path works for me within Xerces-C 2.5 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
