From 8aa96484da1bf4a2cab87178c00aabd019fa5561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C2=A0=20B=C2=A0?= Date: Sun, 3 Apr 2022 16:02:44 +0000 Subject: [PATCH] Markdown: Fix images with special chars in URLs not loaded MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If an image URL contains a non-ASCII character (e.g. `kartöffelchen.jpg`), the html returned by the markdown parser contains the encoded path `kart%C3%B6ffelchen.jpg`. We must decode the path before checking if the image file exists. --- autotests/data/imageUrlsWithSpecialChars.md | 3 +++ autotests/data/kartöffelchen.jpg | Bin 0 -> 34999 bytes autotests/markdowntest.cpp | 16 ++++++++++++++++ generators/markdown/converter.cpp | 3 ++- 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 autotests/data/imageUrlsWithSpecialChars.md create mode 100644 autotests/data/kartöffelchen.jpg diff --git a/autotests/data/imageUrlsWithSpecialChars.md b/autotests/data/imageUrlsWithSpecialChars.md new file mode 100644 index 000000000..0d0bd1ff0 --- /dev/null +++ b/autotests/data/imageUrlsWithSpecialChars.md @@ -0,0 +1,3 @@ +# Test for having images with non-ASCII characters in their name + +![Kartöffelchen](kartöffelchen.jpg) diff --git a/autotests/data/kartöffelchen.jpg b/autotests/data/kartöffelchen.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7dd4d1887811af29ae05dfec555de042ba55813 GIT binary patch literal 34999 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 Row3mKQ_#vg^V0v{1ON?gNAdsw literal 0 HcmV?d00001 diff --git a/autotests/markdowntest.cpp b/autotests/markdowntest.cpp index 4eb0959c5..8f67f1052 100644 --- a/autotests/markdowntest.cpp +++ b/autotests/markdowntest.cpp @@ -23,6 +23,7 @@ private Q_SLOTS: void testFancyPantsEnabled(); void testFancyPantsDisabled(); void testImageSizes(); + void testSpecialCharsInImageFileName(); private: void findImages(QTextFrame *parent, QVector &images); @@ -121,5 +122,20 @@ void MarkdownTest::findImages(const QTextBlock &parent, QVectorrootFrame(); + + QVector images; + findImages(parent, images); + + QCOMPARE(images.size(), 1); + QVERIFY(images[0].name().endsWith(QStringLiteral("kartöffelchen.jpg"))); + QVERIFY(!images[0].name().contains(QStringLiteral("kart%C3%B6ffelchen.jpg"))); +} + QTEST_MAIN(MarkdownTest) #include "markdowntest.moc" diff --git a/generators/markdown/converter.cpp b/generators/markdown/converter.cpp index e4af1741d..d1c80b71b 100644 --- a/generators/markdown/converter.cpp +++ b/generators/markdown/converter.cpp @@ -197,7 +197,8 @@ void Converter::convertImages(const QTextBlock &parent, const QDir &dir, QTextDo cursor.setPosition(textFragment.position(), QTextCursor::MoveAnchor); cursor.setPosition(textFragment.position() + textFragment.length(), QTextCursor::KeepAnchor); - const QString imageFilePath = QDir::cleanPath(dir.absoluteFilePath(textCharFormat.toImageFormat().name())); + const QString imageFilePath = QDir::cleanPath(dir.absoluteFilePath(QUrl::fromPercentEncoding(textCharFormat.toImageFormat().name().toUtf8()))); + if (QFile::exists(imageFilePath)) { cursor.removeSelectedText(); format.setName(imageFilePath);