This reverts commit 29327012f3
.
epel8
parent
55b303c780
commit
9e93f2d670
@ -1,197 +0,0 @@
|
|||||||
diff --git a/autotests/ktexttohtmltest.cpp b/autotests/ktexttohtmltest.cpp
|
|
||||||
index 474f0ca..8fc0c56 100644
|
|
||||||
--- a/autotests/ktexttohtmltest.cpp
|
|
||||||
+++ b/autotests/ktexttohtmltest.cpp
|
|
||||||
@@ -30,6 +30,15 @@ QTEST_MAIN(KTextToHTMLTest)
|
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(KTextToHTML::Options)
|
|
||||||
|
|
||||||
+#ifndef Q_OS_WIN
|
|
||||||
+void initLocale()
|
|
||||||
+{
|
|
||||||
+ setenv("LC_ALL", "en_US.utf-8", 1);
|
|
||||||
+}
|
|
||||||
+Q_CONSTRUCTOR_FUNCTION(initLocale)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
void KTextToHTMLTest::testGetEmailAddress()
|
|
||||||
{
|
|
||||||
// empty input
|
|
||||||
@@ -372,6 +381,11 @@ void KTextToHTMLTest::testHtmlConvert_data()
|
|
||||||
QTest::newRow("url-in-parenthesis-3") << "bla (http://www.kde.org - section 5.2)"
|
|
||||||
<< KTextToHTML::Options(KTextToHTML::PreserveSpaces)
|
|
||||||
<< "bla (<a href=\"http://www.kde.org\">http://www.kde.org</a> - section 5.2)";
|
|
||||||
+
|
|
||||||
+ // Fix url as foo <<url> <url>> when we concatened them.
|
|
||||||
+ QTest::newRow("url-with-url") << "foo <http://www.kde.org/ <http://www.kde.org/>>"
|
|
||||||
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
|
|
||||||
+ << "foo <<a href=\"http://www.kde.org/ \">http://www.kde.org/ </a><<a href=\"http://www.kde.org/\">http://www.kde.org/</a>>>";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/lib/text/ktexttohtml.cpp b/src/lib/text/ktexttohtml.cpp
|
|
||||||
index b5e1bda..c70d062 100644
|
|
||||||
--- a/src/lib/text/ktexttohtml.cpp
|
|
||||||
+++ b/src/lib/text/ktexttohtml.cpp
|
|
||||||
@@ -228,11 +228,19 @@ QString KTextToHTMLHelper::getUrl()
|
|
||||||
|
|
||||||
url.reserve(mMaxUrlLen); // avoid allocs
|
|
||||||
int start = mPos;
|
|
||||||
+ bool previousCharIsSpace = false;
|
|
||||||
while ((mPos < mText.length()) &&
|
|
||||||
(mText[mPos].isPrint() || mText[mPos].isSpace()) &&
|
|
||||||
((afterUrl.isNull() && !mText[mPos].isSpace()) ||
|
|
||||||
(!afterUrl.isNull() && mText[mPos] != afterUrl))) {
|
|
||||||
- if (!mText[mPos].isSpace()) { // skip whitespace
|
|
||||||
+ if (mText[mPos].isSpace()) {
|
|
||||||
+ previousCharIsSpace = true;
|
|
||||||
+ } else { // skip whitespace
|
|
||||||
+ if (previousCharIsSpace && mText[mPos] == QLatin1Char('<')) {
|
|
||||||
+ url.append(QLatin1Char(' '));
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ previousCharIsSpace = false;
|
|
||||||
url.append(mText[mPos]);
|
|
||||||
if (url.length() > mMaxUrlLen) {
|
|
||||||
break;
|
|
||||||
@@ -267,7 +275,6 @@ QString KTextToHTMLHelper::getUrl()
|
|
||||||
}
|
|
||||||
} while (url.length() > 1);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -334,6 +341,7 @@ QString KTextToHTML::convertToHtml(const QString &plainText, const KTextToHTML::
|
|
||||||
QChar ch;
|
|
||||||
int x;
|
|
||||||
bool startOfLine = true;
|
|
||||||
+ //qDebug()<<" plainText"<<plainText;
|
|
||||||
|
|
||||||
for (helper.mPos = 0, x = 0; helper.mPos < helper.mText.length();
|
|
||||||
++helper.mPos, ++x) {
|
|
||||||
@@ -402,6 +410,7 @@ QString KTextToHTML::convertToHtml(const QString &plainText, const KTextToHTML::
|
|
||||||
const int start = helper.mPos;
|
|
||||||
if (!(flags & IgnoreUrls)) {
|
|
||||||
str = helper.getUrl();
|
|
||||||
+ //qDebug()<<" str"<<str;
|
|
||||||
if (!str.isEmpty()) {
|
|
||||||
QString hyperlink;
|
|
||||||
if (str.left(4) == QLatin1String("www.")) {
|
|
||||||
@@ -455,6 +464,7 @@ QString KTextToHTML::convertToHtml(const QString &plainText, const KTextToHTML::
|
|
||||||
|
|
||||||
result = helper.emoticonsInterface()->parseEmoticons(result, true, exclude);
|
|
||||||
}
|
|
||||||
+ //qDebug()<<" result "<<result;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
diff --git a/autotests/ktexttohtmltest.cpp b/autotests/ktexttohtmltest.cpp
|
|
||||||
index 8fc0c56..c5690e8 100644
|
|
||||||
--- a/autotests/ktexttohtmltest.cpp
|
|
||||||
+++ b/autotests/ktexttohtmltest.cpp
|
|
||||||
@@ -386,6 +386,12 @@ void KTextToHTMLTest::testHtmlConvert_data()
|
|
||||||
QTest::newRow("url-with-url") << "foo <http://www.kde.org/ <http://www.kde.org/>>"
|
|
||||||
<< KTextToHTML::Options(KTextToHTML::PreserveSpaces)
|
|
||||||
<< "foo <<a href=\"http://www.kde.org/ \">http://www.kde.org/ </a><<a href=\"http://www.kde.org/\">http://www.kde.org/</a>>>";
|
|
||||||
+
|
|
||||||
+ //Fix url exploit
|
|
||||||
+ QTest::newRow("url-exec-html") << "https://\"><!--"
|
|
||||||
+ << KTextToHTML::Options(KTextToHTML::PreserveSpaces)
|
|
||||||
+ << "https://\"><!--";
|
|
||||||
+
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/lib/text/ktexttohtml.cpp b/src/lib/text/ktexttohtml.cpp
|
|
||||||
index c70d062..97c5eab 100644
|
|
||||||
--- a/src/lib/text/ktexttohtml.cpp
|
|
||||||
+++ b/src/lib/text/ktexttohtml.cpp
|
|
||||||
@@ -156,7 +156,6 @@ bool KTextToHTMLHelper::atUrl()
|
|
||||||
(allowedSpecialChars.indexOf(mText[mPos - 1]) != -1))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
QChar ch = mText[mPos];
|
|
||||||
return
|
|
||||||
(ch == QLatin1Char('h') && (mText.mid(mPos, 7) == QLatin1String("http://") ||
|
|
||||||
@@ -192,7 +191,7 @@ bool KTextToHTMLHelper::isEmptyUrl(const QString &url)
|
|
||||||
url == QLatin1String("news://");
|
|
||||||
}
|
|
||||||
|
|
||||||
-QString KTextToHTMLHelper::getUrl()
|
|
||||||
+QString KTextToHTMLHelper::getUrl(bool *badurl)
|
|
||||||
{
|
|
||||||
QString url;
|
|
||||||
if (atUrl()) {
|
|
||||||
@@ -229,6 +228,7 @@ QString KTextToHTMLHelper::getUrl()
|
|
||||||
url.reserve(mMaxUrlLen); // avoid allocs
|
|
||||||
int start = mPos;
|
|
||||||
bool previousCharIsSpace = false;
|
|
||||||
+ bool previousCharIsADoubleQuote = false;
|
|
||||||
while ((mPos < mText.length()) &&
|
|
||||||
(mText[mPos].isPrint() || mText[mPos].isSpace()) &&
|
|
||||||
((afterUrl.isNull() && !mText[mPos].isSpace()) ||
|
|
||||||
@@ -241,6 +241,18 @@ QString KTextToHTMLHelper::getUrl()
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
previousCharIsSpace = false;
|
|
||||||
+ if (mText[mPos] == QLatin1Char('>') && previousCharIsADoubleQuote) {
|
|
||||||
+ //it's an invalid url
|
|
||||||
+ if (badurl) {
|
|
||||||
+ *badurl = true;
|
|
||||||
+ }
|
|
||||||
+ return QString();
|
|
||||||
+ }
|
|
||||||
+ if (mText[mPos] == QLatin1Char('"')) {
|
|
||||||
+ previousCharIsADoubleQuote = true;
|
|
||||||
+ } else {
|
|
||||||
+ previousCharIsADoubleQuote = false;
|
|
||||||
+ }
|
|
||||||
url.append(mText[mPos]);
|
|
||||||
if (url.length() > mMaxUrlLen) {
|
|
||||||
break;
|
|
||||||
@@ -341,7 +353,6 @@ QString KTextToHTML::convertToHtml(const QString &plainText, const KTextToHTML::
|
|
||||||
QChar ch;
|
|
||||||
int x;
|
|
||||||
bool startOfLine = true;
|
|
||||||
- //qDebug()<<" plainText"<<plainText;
|
|
||||||
|
|
||||||
for (helper.mPos = 0, x = 0; helper.mPos < helper.mText.length();
|
|
||||||
++helper.mPos, ++x) {
|
|
||||||
@@ -409,8 +420,11 @@ QString KTextToHTML::convertToHtml(const QString &plainText, const KTextToHTML::
|
|
||||||
} else {
|
|
||||||
const int start = helper.mPos;
|
|
||||||
if (!(flags & IgnoreUrls)) {
|
|
||||||
- str = helper.getUrl();
|
|
||||||
- //qDebug()<<" str"<<str;
|
|
||||||
+ bool badUrl = false;
|
|
||||||
+ str = helper.getUrl(&badUrl);
|
|
||||||
+ if (badUrl) {
|
|
||||||
+ return helper.mText;
|
|
||||||
+ }
|
|
||||||
if (!str.isEmpty()) {
|
|
||||||
QString hyperlink;
|
|
||||||
if (str.left(4) == QLatin1String("www.")) {
|
|
||||||
@@ -464,7 +478,6 @@ QString KTextToHTML::convertToHtml(const QString &plainText, const KTextToHTML::
|
|
||||||
|
|
||||||
result = helper.emoticonsInterface()->parseEmoticons(result, true, exclude);
|
|
||||||
}
|
|
||||||
- //qDebug()<<" result "<<result;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
diff --git a/src/lib/text/ktexttohtml_p.h b/src/lib/text/ktexttohtml_p.h
|
|
||||||
index 74ad7a0..fc43613 100644
|
|
||||||
--- a/src/lib/text/ktexttohtml_p.h
|
|
||||||
+++ b/src/lib/text/ktexttohtml_p.h
|
|
||||||
@@ -49,7 +49,7 @@ public:
|
|
||||||
QString getEmailAddress();
|
|
||||||
bool atUrl();
|
|
||||||
bool isEmptyUrl(const QString &url);
|
|
||||||
- QString getUrl();
|
|
||||||
+ QString getUrl(bool *badurl = Q_NULLPTR);
|
|
||||||
QString pngToDataUrl(const QString &pngPath);
|
|
||||||
QString highlightedText();
|
|
||||||
|
|
Loading…
Reference in new issue