qdataurl: fix parsing parameter values with percent-encoded comma
Change-Id: I2faa8ce7c9932eb82a853421290c39a37ad91bcf Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
c140d9ab8e
commit
1f2863ae48
@ -30,12 +30,14 @@ Q_CORE_EXPORT bool qDecodeDataUrl(const QUrl &uri, QString &mimeType, QByteArray
|
|||||||
if (uri.scheme() != "data"_L1 || !uri.host().isEmpty())
|
if (uri.scheme() != "data"_L1 || !uri.host().isEmpty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
payload = QByteArray::fromPercentEncoding(uri.toEncoded(QUrl::RemoveScheme));
|
payload = uri.toEncoded(QUrl::RemoveScheme);
|
||||||
// parse it:
|
// parse it:
|
||||||
|
// percent decode after finding the `,`, to workaround parameter
|
||||||
|
// values containing a percent-encoded comma
|
||||||
const qsizetype pos = payload.indexOf(',');
|
const qsizetype pos = payload.indexOf(',');
|
||||||
if (pos != -1) {
|
if (pos != -1) {
|
||||||
auto data = QLatin1StringView{payload};
|
QByteArray contentType = payload.first(pos).percentDecoded();
|
||||||
data.truncate(pos);
|
auto data = QLatin1StringView{contentType};
|
||||||
data = data.trimmed();
|
data = data.trimmed();
|
||||||
|
|
||||||
QLatin1StringView mime;
|
QLatin1StringView mime;
|
||||||
@ -74,6 +76,7 @@ Q_CORE_EXPORT bool qDecodeDataUrl(const QUrl &uri, QString &mimeType, QByteArray
|
|||||||
|
|
||||||
payload.slice(pos + 1);
|
payload.slice(pos + 1);
|
||||||
data = {};
|
data = {};
|
||||||
|
payload = std::move(payload).percentDecoded();
|
||||||
|
|
||||||
if (isBas64) {
|
if (isBas64) {
|
||||||
auto r = QByteArray::fromBase64Encoding(std::move(payload));
|
auto r = QByteArray::fromBase64Encoding(std::move(payload));
|
||||||
|
@ -62,6 +62,10 @@ void tst_QDataUrl::decode_data()
|
|||||||
"text/plain;charset=UTF-8", "");
|
"text/plain;charset=UTF-8", "");
|
||||||
row("not-real-charset", "data:incharsetter=true,", true, defaultMimeType, "");
|
row("not-real-charset", "data:incharsetter=true,", true, defaultMimeType, "");
|
||||||
|
|
||||||
|
row("percent-encoded-comma-in-parameter-value",
|
||||||
|
"data:;charset=%22UTF-8%22;x-bar=\"a%2Cb%2Cc\",Hello%2C%20world", true,
|
||||||
|
"text/plain;charset=\"UTF-8\""_L1, "Hello, world");
|
||||||
|
|
||||||
QString path = QFINDTESTDATA("arrow-down-16.png");
|
QString path = QFINDTESTDATA("arrow-down-16.png");
|
||||||
QFile img(path);
|
QFile img(path);
|
||||||
QVERIFY(img.open(QFile::ReadOnly));
|
QVERIFY(img.open(QFile::ReadOnly));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user