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=17096>.
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=17096

XMLUri relative path calculation badly broken

           Summary: XMLUri relative path calculation badly broken
           Product: Xerces-C++
           Version: 2.2.0
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Utilities
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


As an aside - might it be worth putting classes such as this in the XML-Commons
project?

When calculating relative paths, the XMLUri class does not handle "/../" or
"/./" properly, resulting in severely mangled paths.

Have attached a diff for XMLUri.cpp that fixes the problems I had (but is not
terribly efficient).

A code sample that demonstrates one of the main problems is pasted below.

Output on my system is :

Path = /a/test/.uri

#include <xercesc/util/XMLUri.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>
#include <iostream>

using XERCES_CPP_NAMESPACE_QUALIFIER XMLUri;
using XERCES_CPP_NAMESPACE_QUALIFIER XMLString;
using XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils;


char gBaseURIstr [] = "file:///a/test/of";
char gRelativeURIstr [] = "../uri";

int main (int argc, char ** argv) {


        XMLPlatformUtils::Initialize();

        {
                XMLCh * b = XMLString::transcode(gBaseURIstr);
                XMLCh * r = XMLString::transcode(gRelativeURIstr);

                XMLUri BaseUri(b);
                XMLUri Uri(&BaseUri, r);

                char * s = XMLString::transcode(Uri.getPath());

                cerr << "Path = " << s << endl;

                delete[] b;
                delete[] r;
                delete[] s;
        }
        
        XMLPlatformUtils::Terminate();

        return 0;

}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to