You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by "Brenton Thomas (JIRA)" <xe...@xml.apache.org> on 2008/01/05 08:34:33 UTC

[jira] Updated: (XERCESC-1773) Spaces in Filenames problem with XMLUri::normalizeURI

     [ https://issues.apache.org/jira/browse/XERCESC-1773?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Brenton Thomas updated XERCESC-1773:
------------------------------------

    Description: 
When using a filename containing spaces that has been escaped by a %20 you end up with problems if the space is followed by a number. For example if you have a directory  "D:\Home\Development\StrawberryFields 2.0" you need to escape it to give "D:\Home\Development\StrawberryFields%202.0"  - which is obviously going to break because it confuses the 2 at the end.  To fix this you escape the number following the space to give "D:\Home\Development\StrawberryFields%20%32.0" .  

This is OK in terms of providing a legal schemaLocation except....

The routine XMLUri::normalizeURI  then takes the escaped name and unescapes it to return a form the system recognises.  What it needs to do is parse through the string and unescape everything - not just the %20 


void XMLUri::normalizeURI(const XMLCh*     const systemURI,
                                XMLBuffer&       normalizedURI)
{
    const XMLCh* pszSrc = systemURI;

    normalizedURI.reset();

    while (*pszSrc) {

        if ((*(pszSrc) == chPercent)
        &&  (*(pszSrc+1) == chDigit_2)
        &&  (*(pszSrc+2) == chDigit_0))
        {
            pszSrc += 3;
            normalizedURI.append(chSpace);
        }
        else 
        {
            normalizedURI.append(*pszSrc);
            pszSrc++;
        }
    }
}




  was:
When using a filename containing spaces that has been escaped by a %20 you end up with problems if the space is followed by a number. For example if you have a directory  "D:\Home\Development\StrawberryFields 2.0" you need to escape it to give "D:\Home\Development\StrawberryFields%202.0"  - which is obviously going to break because it confuses the 2 at the end.  To fix this you escape the number following the space to give "D:\Home\Development\StrawberryFields%20%32.0" .  

This is OK in terms of providing a legal schemaLocation except....

The routine XMLUri::normalizeURI  then takes the escaped name and unescapes it to return a form the system recognises.  What it needs to do is parse through the string and unescape everything.


void XMLUri::normalizeURI(const XMLCh*     const systemURI,
                                XMLBuffer&       normalizedURI)
{
    const XMLCh* pszSrc = systemURI;

    normalizedURI.reset();

    while (*pszSrc) {

        if ((*(pszSrc) == chPercent)
        &&  (*(pszSrc+1) == chDigit_2)
        &&  (*(pszSrc+2) == chDigit_0))
        {
            pszSrc += 3;
            normalizedURI.append(chSpace);
        }
        else 
        {
            normalizedURI.append(*pszSrc);
            pszSrc++;
        }
    }
}





> Spaces in Filenames problem with XMLUri::normalizeURI
> -----------------------------------------------------
>
>                 Key: XERCESC-1773
>                 URL: https://issues.apache.org/jira/browse/XERCESC-1773
>             Project: Xerces-C++
>          Issue Type: Bug
>         Environment: WindowsXP 64
>            Reporter: Brenton Thomas
>             Fix For: 2.8.0
>
>
> When using a filename containing spaces that has been escaped by a %20 you end up with problems if the space is followed by a number. For example if you have a directory  "D:\Home\Development\StrawberryFields 2.0" you need to escape it to give "D:\Home\Development\StrawberryFields%202.0"  - which is obviously going to break because it confuses the 2 at the end.  To fix this you escape the number following the space to give "D:\Home\Development\StrawberryFields%20%32.0" .  
> This is OK in terms of providing a legal schemaLocation except....
> The routine XMLUri::normalizeURI  then takes the escaped name and unescapes it to return a form the system recognises.  What it needs to do is parse through the string and unescape everything - not just the %20 
> void XMLUri::normalizeURI(const XMLCh*     const systemURI,
>                                 XMLBuffer&       normalizedURI)
> {
>     const XMLCh* pszSrc = systemURI;
>     normalizedURI.reset();
>     while (*pszSrc) {
>         if ((*(pszSrc) == chPercent)
>         &&  (*(pszSrc+1) == chDigit_2)
>         &&  (*(pszSrc+2) == chDigit_0))
>         {
>             pszSrc += 3;
>             normalizedURI.append(chSpace);
>         }
>         else 
>         {
>             normalizedURI.append(*pszSrc);
>             pszSrc++;
>         }
>     }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org