comphelper/source/misc/storagehelper.cxx | 7 connectivity/source/drivers/postgresql/pq_tools.cxx | 6 include/rtl/uri.h | 32 -- sal/qa/rtl/uri/rtl_testuri.cxx | 72 ++--- sal/rtl/uri.cxx | 257 +++++++++----------- svgio/source/svgreader/svgimagenode.cxx | 6 xmloff/source/draw/shapeexport.cxx | 10 7 files changed, 169 insertions(+), 221 deletions(-)
New commits: commit d739b01b9f20b1a7fd4b313b28e4dd4e5edd9193 Author: Stephan Bergmann <[email protected]> Date: Sat Mar 1 19:25:38 2014 +0100 Adapt rtl_uriConvertRelToAbs to RFC 3986 ...which updates RFC 2396, removes the requirement that the base URI's path starts with a slash, and clarifies how to treat excess "." and ".." segments. This nicely allows handling of those odd vnd.sun.star.Package URLs as intended now, so that making <foo> absolute relative to base URL <vnd.sun.star.Package:Pictures/bar> yields <vnd.sun.star.Package:Pictures/foo> instead of provoking a MalformedUriException. Change-Id: Ice84303a57698a2c05d3a45541fe78b67450fa3c diff --git a/include/rtl/uri.h b/include/rtl/uri.h index a4e1d37..248a0d4 100644 --- a/include/rtl/uri.h +++ b/include/rtl/uri.h @@ -294,39 +294,27 @@ SAL_DLLPUBLIC void SAL_CALL rtl_uriDecode( rtl_uString ** pResult) SAL_THROW_EXTERN_C(); -/** Convert a relative URI reference into an absolute one. +/** Convert a relative URI reference into an absolute URI. - A URI reference is a URI plus an optional @<"#" fragment> part. - - This function uses the algorithm described in RFC 2396, section 5.2, with - the following clarifications: (1) Backwards-compatible relative URIs - starting with a scheme component (see RFC 2396, section 5.2, step 3) are not - supported. (2) Segments "." and ".." within the path of the base URI are - not considered special, RFC 2396 seems a bit unlcear about that point. - (3) Erroneous excess segments ".." within the path of the relative URI (if - it is indeed relative) are left intact, as the examples in RFC 2396, - section C.2, suggest. (4) If the relative URI is a reference to the - "current document," the "current document" is taken to be the base URI. + This function uses the strict parser algorithm described in RFC 3986, + section 5.2. This function signals exceptions by returning false and letting pException point to a message explaining the exception. @param pBaseUriRef - An absolute, hierarchical URI reference that serves as the base URI. If it - has to be inspected (i.e., pRelUriRef is not an absolute URI already), and - if it either is not an absolute URI (i.e., does not begin with a - @<scheme ":"> part) or has a path that is non-empty but does not start - with "/", an exception will be signaled. + An absolute URI that serves as the base URI. If it has to be inspected + (i.e., pRelUriRef is not an absolute URI already), and it is not an absolute + URI (i.e., does not begin with a @<scheme ":"> part), an exception will be + signaled. @param pRelUriRef An URI reference that may be either absolute or relative. If it is - absolute, it will be returned unmodified (and it need not be hierarchical - then). + absolute, it will be returned unmodified. @param pResult - Returns an absolute URI reference. Must itself not be null, and must point - to either null or a valid string. If an exception is signalled, it is left - unchanged. + Returns an absolute URI. Must itself not be null, and must point to either + null or a valid string. If an exception is signalled, it is left unchanged. @param pException Returns an explanatory message in case an exception is signalled. Must diff --git a/sal/qa/rtl/uri/rtl_testuri.cxx b/sal/qa/rtl/uri/rtl_testuri.cxx index b230d43..fce4aa5 100644 --- a/sal/qa/rtl/uri/rtl_testuri.cxx +++ b/sal/qa/rtl/uri/rtl_testuri.cxx @@ -279,14 +279,14 @@ void Test::test_Uri() { char const * pAbs; }; static RelToAbsTest const aRelToAbsTest[] - = { // The following tests are taken from RFC 2396: + = { // The following tests are taken from RFC 3986: { "http://a/b/c/d;p?q", "g:h", "g:h" }, { "http://a/b/c/d;p?q", "g", "http://a/b/c/g" }, { "http://a/b/c/d;p?q", "./g", "http://a/b/c/g" }, { "http://a/b/c/d;p?q", "g/", "http://a/b/c/g/" }, { "http://a/b/c/d;p?q", "/g", "http://a/g" }, { "http://a/b/c/d;p?q", "//g", "http://g" }, - { "http://a/b/c/d;p?q", "?y", "http://a/b/c/?y" }, + { "http://a/b/c/d;p?q", "?y", "http://a/b/c/d;p?y" }, { "http://a/b/c/d;p?q", "g?y", "http://a/b/c/g?y" }, { "http://a/b/c/d;p?q", "#s", "http://a/b/c/d;p?q#s" }, { "http://a/b/c/d;p?q", "g#s", "http://a/b/c/g#s" }, @@ -294,6 +294,7 @@ void Test::test_Uri() { { "http://a/b/c/d;p?q", ";x", "http://a/b/c/;x" }, { "http://a/b/c/d;p?q", "g;x", "http://a/b/c/g;x" }, { "http://a/b/c/d;p?q", "g;x?y#s", "http://a/b/c/g;x?y#s" }, + { "http://a/b/c/d;p?q", "", "http://a/b/c/d;p?q" }, { "http://a/b/c/d;p?q", ".", "http://a/b/c/" }, { "http://a/b/c/d;p?q", "./", "http://a/b/c/" }, { "http://a/b/c/d;p?q", "..", "http://a/b/" }, @@ -302,11 +303,10 @@ void Test::test_Uri() { { "http://a/b/c/d;p?q", "../..", "http://a/" }, { "http://a/b/c/d;p?q", "../../", "http://a/" }, { "http://a/b/c/d;p?q", "../../g", "http://a/g" }, - { "http://a/b/c/d;p?q", "", "http://a/b/c/d;p?q" }, - { "http://a/b/c/d;p?q", "../../../g", "http://a/../g" }, - { "http://a/b/c/d;p?q", "../../../../g", "http://a/../../g" }, - { "http://a/b/c/d;p?q", "/./g", "http://a/./g" }, - { "http://a/b/c/d;p?q", "/../g", "http://a/../g" }, + { "http://a/b/c/d;p?q", "../../../g", "http://a/g" }, + { "http://a/b/c/d;p?q", "../../../../g", "http://a/g" }, + { "http://a/b/c/d;p?q", "/./g", "http://a/g" }, + { "http://a/b/c/d;p?q", "/../g", "http://a/g" }, { "http://a/b/c/d;p?q", "g.", "http://a/b/c/g." }, { "http://a/b/c/d;p?q", ".g", "http://a/b/c/.g" }, { "http://a/b/c/d;p?q", "g..", "http://a/b/c/g.." }, @@ -322,13 +322,15 @@ void Test::test_Uri() { { "http://a/b/c/d;p?q", "g#s/./x", "http://a/b/c/g#s/./x" }, { "http://a/b/c/d;p?q", "g#s/../x", "http://a/b/c/g#s/../x" }, { "http://a/b/c/d;p?q", "http:g", "http:g" }, + { "http!://a/b/c/d;p?q", "g:h", "g:h" }, { "http!://a/b/c/d;p?q", "g", 0 }, { "http:b/c/d;p?q", "g:h", "g:h" }, - { "http:b/c/d;p?q", "g", 0 }, - { "http://a/b/../", "../c", "http://a/b/../../c" }, + { "http:b/c/d;p?q", "g", "http:b/c/g" }, + { "http://a/b/../", "../c", "http://a/c" }, { "http://a/b/..", "../c", "http://a/c" }, - { "http://a/./b/", ".././.././../c", "http://a/./../../c" } }; + { "http://a/./b/", ".././.././../c", "http://a/c" }, + { "http://a", "b", "http://a/b" } }; for (std::size_t i = 0; i < sizeof aRelToAbsTest / sizeof (RelToAbsTest); ++i) { rtl::OUString aAbs; diff --git a/sal/rtl/uri.cxx b/sal/rtl/uri.cxx index 774c5f7..2d6c522 100644 --- a/sal/rtl/uri.cxx +++ b/sal/rtl/uri.cxx @@ -32,6 +32,7 @@ #include "sal/types.h" #include "sal/macros.h" +#include <algorithm> #include <cstddef> namespace { @@ -412,81 +413,55 @@ void parseUriRef(rtl_uString const * pUriRef, Components * pComponents) } } -rtl::OUString joinPaths(Component const & rBasePath, Component const & rRelPath) +void appendPath( + rtl::OUStringBuffer & buffer, sal_Int32 bufferStart, bool precedingSlash, + sal_Unicode const * pathBegin, sal_Unicode const * pathEnd) { - assert(rBasePath.isPresent() && *rBasePath.pBegin == '/'); - assert(rRelPath.isPresent()); - - // The invariant of aBuffer is that it always starts and ends with a slash - // (until probably right at the end of the algorithm, when the last segment - // of rRelPath is added, which does not necessarily end in a slash): - rtl::OUStringBuffer aBuffer(rBasePath.getLength() + rRelPath.getLength()); - // XXX numeric overflow - - // Segments "." and ".." within rBasePath are not conisdered special (but - // are also not removed by ".." segments within rRelPath), RFC 2396 seems a - // bit unclear about this point: - sal_Int32 nFixed = 1; - sal_Unicode const * p = rBasePath.pBegin + 1; - for (sal_Unicode const * q = p; q != rBasePath.pEnd; ++q) - if (*q == '/') - { - if ( - (q - p == 1 && p[0] == '.') || - (q - p == 2 && p[0] == '.' && p[1] == '.') - ) - { - nFixed = q + 1 - rBasePath.pBegin; - } - p = q + 1; + while (precedingSlash || pathBegin != pathEnd) { + sal_Unicode const * p = pathBegin; + while (p != pathEnd && *p != '/') { + ++p; } - aBuffer.append(rBasePath.pBegin, p - rBasePath.pBegin); - - p = rRelPath.pBegin; - if (p != rRelPath.pEnd) - for (;;) - { - sal_Unicode const * q = p; - sal_Unicode const * r; - for (;;) - { - if (q == rRelPath.pEnd) - { - r = q; - break; - } - if (*q == '/') - { - r = q + 1; - break; - } - ++q; + std::size_t n = p - pathBegin; + if (n == 1 && pathBegin[0] == '.') { + // input begins with "." -> remove from input (and done): + // i.e., !precedingSlash -> !precedingSlash + // input begins with "./" -> remove from input: + // i.e., !precedingSlash -> !precedingSlash + // input begins with "/." -> replace with "/" in input (and not yet + // done): + // i.e., precedingSlash -> precedingSlash + // input begins with "/./" -> replace with "/" in input: + // i.e., precedingSlash -> precedingSlash + } else if (n == 2 && pathBegin[0] == '.' && pathBegin[1] == '.') { + // input begins with ".." -> remove from input (and done): + // i.e., !precedingSlash -> !precedingSlash + // input begins with "../" -> remove from input + // i.e., !precedingSlash -> !precedingSlash + // input begins with "/.." -> replace with "/" in input, and shrink + // output (not not yet done): + // i.e., precedingSlash -> precedingSlash + // input begins with "/../" -> replace with "/" in input, and shrink + // output: + // i.e., precedingSlash -> precedingSlash + if (precedingSlash) { + buffer.truncate( + bufferStart + + std::max<sal_Int32>( + rtl_ustr_lastIndexOfChar_WithLength( + buffer.getStr() + bufferStart, + buffer.getLength() - bufferStart, '/'), + 0)); } - if (q - p == 2 && p[0] == '.' && p[1] == '.') - { - // Erroneous excess segments ".." within rRelPath are left - // intact, as the examples in RFC 2396, section C.2, suggest: - sal_Int32 i = aBuffer.getLength() - 1; - if (i < nFixed) - { - aBuffer.append(p, r - p); - nFixed += 3; - } - else - { - while (i > 0 && aBuffer[i - 1] != '/') - --i; - aBuffer.setLength(i); - } + } else { + if (precedingSlash) { + buffer.append('/'); } - else if (q - p != 1 || *p != '.') - aBuffer.append(p, r - p); - if (q == rRelPath.pEnd) - break; - p = q + 1; + buffer.append(pathBegin, n); + precedingSlash = p != pathEnd; } - - return aBuffer.makeStringAndClear(); + pathBegin = p + (p == pathEnd ? 0 : 1); + } } } @@ -689,87 +664,101 @@ sal_Bool SAL_CALL rtl_uriConvertRelToAbs(rtl_uString * pBaseUriRef, rtl_uString ** pException) SAL_THROW_EXTERN_C() { - // If pRelUriRef starts with a scheme component it is an absolute URI - // reference, and we are done (i.e., this algorithm does not support - // backwards-compatible relative URIs starting with a scheme component, see - // RFC 2396, section 5.2, step 3): + // Use the strict parser algorithm from RFC 3986, section 5.2, to turn the + // relative URI into an absolute one: + rtl::OUStringBuffer aBuffer; Components aRelComponents; parseUriRef(pRelUriRef, &aRelComponents); if (aRelComponents.aScheme.isPresent()) { - rtl_uString_assign(pResult, pRelUriRef); - return true; - } - - // Parse pBaseUriRef; if the scheme component is not present or not valid, - // or the path component is not empty and starts with anything but a slash, - // an exception is raised: - Components aBaseComponents; - parseUriRef(pBaseUriRef, &aBaseComponents); - if (!aBaseComponents.aScheme.isPresent()) - { - rtl_uString_assign( - pException, - (rtl::OUString( - "<" + rtl::OUString(pBaseUriRef) - + "> does not start with a scheme component") - .pData)); - return false; - } - if (aBaseComponents.aPath.pBegin != aBaseComponents.aPath.pEnd - && *aBaseComponents.aPath.pBegin != '/') - { - rtl_uString_assign( - pException, - (rtl::OUString( - "<" + rtl::OUString(pBaseUriRef) - + "> path component does not start with a slash") - .pData)); - return false; - } - - // Use the algorithm from RFC 2396, section 5.2, to turn the relative URI - // into an absolute one (if the relative URI is a reference to the "current - // document," the "current document" is here taken to be the base URI): - rtl::OUStringBuffer aBuffer; - aBuffer.append(aBaseComponents.aScheme.pBegin, - aBaseComponents.aScheme.getLength()); - if (aRelComponents.aAuthority.isPresent()) - { - aBuffer.append(aRelComponents.aAuthority.pBegin, - aRelComponents.aAuthority.getLength()); - aBuffer.append(aRelComponents.aPath.pBegin, - aRelComponents.aPath.getLength()); + aBuffer.append(aRelComponents.aScheme.pBegin, + aRelComponents.aScheme.getLength()); + if (aRelComponents.aAuthority.isPresent()) + aBuffer.append(aRelComponents.aAuthority.pBegin, + aRelComponents.aAuthority.getLength()); + appendPath( + aBuffer, aBuffer.getLength(), false, aRelComponents.aPath.pBegin, + aRelComponents.aPath.pEnd); if (aRelComponents.aQuery.isPresent()) aBuffer.append(aRelComponents.aQuery.pBegin, aRelComponents.aQuery.getLength()); } else { - if (aBaseComponents.aAuthority.isPresent()) - aBuffer.append(aBaseComponents.aAuthority.pBegin, - aBaseComponents.aAuthority.getLength()); - if (aRelComponents.aPath.pBegin == aRelComponents.aPath.pEnd - && !aRelComponents.aQuery.isPresent()) + Components aBaseComponents; + parseUriRef(pBaseUriRef, &aBaseComponents); + if (!aBaseComponents.aScheme.isPresent()) { - aBuffer.append(aBaseComponents.aPath.pBegin, - aBaseComponents.aPath.getLength()); - if (aBaseComponents.aQuery.isPresent()) - aBuffer.append(aBaseComponents.aQuery.pBegin, - aBaseComponents.aQuery.getLength()); + rtl_uString_assign( + pException, + (rtl::OUString( + "<" + rtl::OUString(pBaseUriRef) + + "> does not start with a scheme component") + .pData)); + return false; } - else + aBuffer.append(aBaseComponents.aScheme.pBegin, + aBaseComponents.aScheme.getLength()); + if (aRelComponents.aAuthority.isPresent()) { - if (*aRelComponents.aPath.pBegin == '/') - aBuffer.append(aRelComponents.aPath.pBegin, - aRelComponents.aPath.getLength()); - else - aBuffer.append(joinPaths(aBaseComponents.aPath, - aRelComponents.aPath)); + aBuffer.append(aRelComponents.aAuthority.pBegin, + aRelComponents.aAuthority.getLength()); + appendPath( + aBuffer, aBuffer.getLength(), false, + aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd); if (aRelComponents.aQuery.isPresent()) aBuffer.append(aRelComponents.aQuery.pBegin, aRelComponents.aQuery.getLength()); } + else + { + if (aBaseComponents.aAuthority.isPresent()) + aBuffer.append(aBaseComponents.aAuthority.pBegin, + aBaseComponents.aAuthority.getLength()); + if (aRelComponents.aPath.pBegin == aRelComponents.aPath.pEnd) + { + aBuffer.append(aBaseComponents.aPath.pBegin, + aBaseComponents.aPath.getLength()); + if (aRelComponents.aQuery.isPresent()) + aBuffer.append(aRelComponents.aQuery.pBegin, + aRelComponents.aQuery.getLength()); + else if (aBaseComponents.aQuery.isPresent()) + aBuffer.append(aBaseComponents.aQuery.pBegin, + aBaseComponents.aQuery.getLength()); + } + else + { + if (aRelComponents.aPath.pBegin != aRelComponents.aPath.pEnd + && *aRelComponents.aPath.pBegin == '/') + appendPath( + aBuffer, aBuffer.getLength(), false, + aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd); + else if (aBaseComponents.aAuthority.isPresent() + && aBaseComponents.aPath.pBegin + == aBaseComponents.aPath.pEnd) + appendPath( + aBuffer, aBuffer.getLength(), true, + aRelComponents.aPath.pBegin, aRelComponents.aPath.pEnd); + else + { + sal_Int32 n = aBuffer.getLength(); + sal_Int32 i = rtl_ustr_lastIndexOfChar_WithLength( + aBaseComponents.aPath.pBegin, + aBaseComponents.aPath.getLength(), '/'); + if (i >= 0) { + appendPath( + aBuffer, n, false, aBaseComponents.aPath.pBegin, + aBaseComponents.aPath.pBegin + i); + } + appendPath( + aBuffer, n, i >= 0, aRelComponents.aPath.pBegin, + aRelComponents.aPath.pEnd); + } + if (aRelComponents.aQuery.isPresent()) + aBuffer.append(aRelComponents.aQuery.pBegin, + aRelComponents.aQuery.getLength()); + } + } } if (aRelComponents.aFragment.isPresent()) aBuffer.append(aRelComponents.aFragment.pBegin, diff --git a/svgio/source/svgreader/svgimagenode.cxx b/svgio/source/svgreader/svgimagenode.cxx index e575502..785136b 100644 --- a/svgio/source/svgreader/svgimagenode.cxx +++ b/svgio/source/svgreader/svgimagenode.cxx @@ -238,11 +238,7 @@ namespace svgio try { aAbsUrl = rtl::Uri::convertRelToAbs(rPath, maUrl); } catch (rtl::MalformedUriException & e) { - // Happens for the odd rPath = - // "vnd.sun.star.Package:Pictures/..." scheme using - // path components not starting with a slash by mis- - // design: - SAL_INFO( + SAL_WARN( "svg", "caught rtl::MalformedUriException \"" << e.getMessage() << "\""); commit 58f033569aedbeb2d6bc9d8e903b3f5a63c99614 Author: Stephan Bergmann <[email protected]> Date: Sat Mar 1 19:19:04 2014 +0100 Fix construction of non-ASCII test string Change-Id: I495ba4e2394bf0fd09b4d0f0111f9b8531674733 diff --git a/sal/qa/rtl/uri/rtl_testuri.cxx b/sal/qa/rtl/uri/rtl_testuri.cxx index 63a53b1..b230d43 100644 --- a/sal/qa/rtl/uri/rtl_testuri.cxx +++ b/sal/qa/rtl/uri/rtl_testuri.cxx @@ -123,39 +123,23 @@ void Test::test_Uri() { } aText1 = rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM( - "\x00\x01\x02\x03\x04\x05\x06\x07" - "\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" - "\x10\x11\x12\x13\x14\x15\x16\x17" - "\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" - "\x20\x21\x22\x23\x24\x25\x26\x27" - "\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F" - "\x30\x31\x32\x33\x34\x35\x36\x37" - "\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F" - "\x40\x41\x42\x43\x44\x45\x46\x47" - "\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F" - "\x50\x51\x52\x53\x54\x55\x56\x57" - "\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F" - "\x60\x61\x62\x63\x64\x65\x66\x67" - "\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F" - "\x70\x71\x72\x73\x74\x75\x76\x77" - "\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F" - "\x80\x81\x82\x83\x84\x85\x86\x87" - "\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F" - "\x90\x91\x92\x93\x94\x95\x96\x97" - "\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" - "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7" - "\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF" - "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7" - "\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF" - "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7" - "\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF" - "\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7" - "\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF" - "\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7" - "\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF" - "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7" - "\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF")); + ("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F" + "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F" + "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2A\x2B\x2C\x2D\x2E\x2F" + "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F" + "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4A\x4B\x4C\x4D\x4E\x4F" + "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5A\x5B\x5C\x5D\x5E\x5F" + "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6A\x6B\x6C\x6D\x6E\x6F" + "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7A\x7B\x7C\x7D\x7E\x7F" + "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F" + "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F" + "\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF" + "\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF" + "\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF" + "\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF" + "\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF" + "\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"), + 256, RTL_TEXTENCODING_ISO_8859_1); aText2 = aText1; for (rtl_UriCharClass eCharClass = eFirstCharClass; eCharClass <= eLastCharClass; commit 72111620811bb496004ccbf92ec9ea5c9e9e4ea9 Author: Stephan Bergmann <[email protected]> Date: Sat Mar 1 19:16:40 2014 +0100 Clean up uses of rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength Change-Id: Ie37614dac882bfe05f8ce595ae6b20326dce872e diff --git a/comphelper/source/misc/storagehelper.cxx b/comphelper/source/misc/storagehelper.cxx index 0057cd9..0c60a7c 100644 --- a/comphelper/source/misc/storagehelper.cxx +++ b/comphelper/source/misc/storagehelper.cxx @@ -574,12 +574,9 @@ uno::Reference< io::XStream > OStorageHelper::GetStreamAtPackageURL( const OUString& rURL, sal_uInt32 const nOpenMode, LifecycleProxy & rNastiness) { - static char const s_PkgScheme[] = "vnd.sun.star.Package:"; - if (0 == rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( - rURL.getStr(), rURL.getLength(), - s_PkgScheme, SAL_N_ELEMENTS(s_PkgScheme) - 1)) + OUString path; + if (rURL.startsWithIgnoreAsciiCase("vnd.sun.star.Package:", &path)) { - OUString const path(rURL.copy(SAL_N_ELEMENTS(s_PkgScheme)-1)); return GetStreamAtPath(xParentStorage, path, nOpenMode, rNastiness); } return 0; diff --git a/connectivity/source/drivers/postgresql/pq_tools.cxx b/connectivity/source/drivers/postgresql/pq_tools.cxx index 265c3ae..b7a5411 100644 --- a/connectivity/source/drivers/postgresql/pq_tools.cxx +++ b/connectivity/source/drivers/postgresql/pq_tools.cxx @@ -321,13 +321,11 @@ OUString extractTableFromInsert( const OUString & sql ) int i = 0; while (i < sql.getLength() && isWhitespace(sql[i])) { i++; } - if( 0 == rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( - &sql.getStr()[i], sql.getLength() - i, "insert" , 6 ) ) + if( sql.matchIgnoreAsciiCase("insert", i) ) { i += 6; while (i < sql.getLength() && isWhitespace(sql[i])) { i++; } - if( 0 == rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( - &sql.getStr()[i], sql.getLength() - i, "into" , 4 ) ) + if( sql.matchIgnoreAsciiCase("into", i) ) { i +=4; while (i < sql.getLength() && isWhitespace(sql[i])) { i++; } diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx index dab81a0..9f119ac 100644 --- a/xmloff/source/draw/shapeexport.cxx +++ b/xmloff/source/draw/shapeexport.cxx @@ -3126,16 +3126,13 @@ static void lcl_CopyStream( proxy.commitStorages(); } -static char const s_PkgScheme[] = "vnd.sun.star.Package:"; - static OUString lcl_StoreMediaAndGetURL(SvXMLExport & rExport, uno::Reference<beans::XPropertySet> const& xPropSet, OUString const& rURL) { - if (0 == rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength( - rURL.getStr(), rURL.getLength(), - s_PkgScheme, SAL_N_ELEMENTS(s_PkgScheme) - 1)) + OUString urlPath; + if (rURL.startsWithIgnoreAsciiCase("vnd.sun.star.Package:", &urlPath)) { try // video is embedded { @@ -3152,9 +3149,6 @@ lcl_StoreMediaAndGetURL(SvXMLExport & rExport, return OUString(); } - OUString const urlPath( - rURL.copy(SAL_N_ELEMENTS(s_PkgScheme)-1)); - lcl_CopyStream(xInStream, xTarget, rURL); return urlPath; _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
