svgio: make readLocalUrl standard-compliant
See https://bugs.documentfoundation.org/show_bug.cgi?id=149880#c12
Thanks to Mike Kaganski for the references
Change-Id: Idb06cf40ee992dd73120ce051d8ba4f61faaadfc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136877
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Tested-by: Jenkins
(cherry picked from commit e03cd0893eb2031d775764b4696b838dd09fb474)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136864
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
diff --git a/svgio/source/svgreader/svgtools.cxx b/svgio/source/svgreader/svgtools.cxx
index 7fd541a..94f8f20 100644
--- a/svgio/source/svgreader/svgtools.cxx
+++ b/svgio/source/svgreader/svgtools.cxx
@@ -1059,21 +1059,29 @@ namespace svgio::svgreader
bool readLocalUrl(const OUString& rCandidate, OUString& rURL)
{
static const char aStrUrl[] = "url";
static const char aStrUrl[] = "url(";
if(rCandidate.startsWith(aStrUrl))
if(rCandidate.startsWithIgnoreAsciiCase(aStrUrl))
{
const sal_Int32 nLen(rCandidate.getLength());
sal_Int32 nPos(strlen(aStrUrl));
skip_char(rCandidate, '(', nPos, nLen);
sal_Unicode aLimiter(')');
if('"' == rCandidate[nPos])
aLimiter = '"';
skip_char(rCandidate, ' ', nPos, nLen);
skip_char(rCandidate, '"', nPos, nLen);
skip_char(rCandidate, '#', nPos, nLen);
if('"' == rCandidate[nPos])
{
aLimiter = '"';
++nPos;
}
else if('\'' == rCandidate[nPos])
{
aLimiter = '\'';
++nPos;
}
skip_char(rCandidate, ' ', nPos, nLen);
skip_char(rCandidate, '#', nPos, nPos + 1);
OUStringBuffer aTokenValue;
copyToLimiter(rCandidate, aLimiter, nPos, aTokenValue, nLen);