tng         2002/12/06 09:05:30

  Modified:    c/src/xercesc/util XMLURL.cpp
  Log:
  For file protocol, need to manually replace any character reference %xx first
  
  Revision  Changes    Path
  1.4       +41 -4     xml-xerces/c/src/xercesc/util/XMLURL.cpp
  
  Index: XMLURL.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLURL.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XMLURL.cpp        4 Nov 2002 15:22:05 -0000       1.3
  +++ XMLURL.cpp        6 Dec 2002 17:05:29 -0000       1.4
  @@ -519,7 +519,9 @@
               //  style fully qualified path, we have to toss the leading /
               //  character.
               //
  -            const XMLCh* realPath = fPath;
  +            XMLCh* realPath = XMLString::replicate(fPath);
  +            ArrayJanitor<XMLCh> basePathName(realPath);
  +
               if (*fPath == chForwardSlash)
               {
                   if (XMLString::stringLen(fPath) > 3)
  @@ -544,6 +546,42 @@
                   }
               }
   
  +            //
  +            // Need to manually replace any character reference %xx first
  +            // HTTP protocol will be done automatically by the netaccessor
  +            //
  +            int end = XMLString::stringLen(realPath);
  +            int percentIndex = XMLString::indexOf(realPath, chPercent, 0);
  +
  +            while (percentIndex != -1) {
  +
  +                if (percentIndex+2 >= end ||
  +                    !isHexDigit(realPath[percentIndex+1]) ||
  +                    !isHexDigit(realPath[percentIndex+2]))
  +                {
  +                    XMLCh value1[4];
  +                    XMLString::moveChars(value1, &(realPath[percentIndex]), 3);
  +                    value1[3] = chNull;
  +                    ThrowXML2(MalformedURLException
  +                            , 
XMLExcepts::XMLNUM_URI_Component_Invalid_EscapeSequence
  +                            , realPath
  +                            , value1);
  +                }
  +
  +                unsigned int value = (xlatHexDigit(realPath[percentIndex+1]) * 16) 
+ xlatHexDigit(realPath[percentIndex+2]);
  +
  +                realPath[percentIndex] = XMLCh(value);
  +
  +                int i =0;
  +                for (i = percentIndex + 1; i < end - 2 ; i++)
  +                    realPath[i] = realPath[i+2];
  +                realPath[i] = chNull;
  +                end = i;
  +
  +                percentIndex = XMLString::indexOf(realPath, chPercent, 
percentIndex);
  +            }
  +
  +
               BinFileInputStream* retStrm = new BinFileInputStream(realPath);
               if (!retStrm->getIsOpen())
               {
  @@ -955,11 +993,10 @@
            // we didn't get them, so throw an exception
            //
        if (fProtocol == HTTP) {
  -                ThrowXML1
  +                ThrowXML
                   (
                       MalformedURLException
                       , XMLExcepts::URL_ExpectingTwoSlashes
  -                    , "Found 'http' protocol"
                   );
        }
       }
  
  
  

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

Reply via email to