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())
|
||||
return false;
|
||||
|
||||
payload = QByteArray::fromPercentEncoding(uri.toEncoded(QUrl::RemoveScheme));
|
||||
payload = uri.toEncoded(QUrl::RemoveScheme);
|
||||
// parse it:
|
||||
// percent decode after finding the `,`, to workaround parameter
|
||||
// values containing a percent-encoded comma
|
||||
const qsizetype pos = payload.indexOf(',');
|
||||
if (pos != -1) {
|
||||
auto data = QLatin1StringView{payload};
|
||||
data.truncate(pos);
|
||||
QByteArray contentType = payload.first(pos).percentDecoded();
|
||||
auto data = QLatin1StringView{contentType};
|
||||
data = data.trimmed();
|
||||
|
||||
QLatin1StringView mime;
|
||||
@ -74,6 +76,7 @@ Q_CORE_EXPORT bool qDecodeDataUrl(const QUrl &uri, QString &mimeType, QByteArray
|
||||
|
||||
payload.slice(pos + 1);
|
||||
data = {};
|
||||
payload = std::move(payload).percentDecoded();
|
||||
|
||||
if (isBas64) {
|
||||
auto r = QByteArray::fromBase64Encoding(std::move(payload));
|
||||
|
@ -62,6 +62,10 @@ void tst_QDataUrl::decode_data()
|
||||
"text/plain;charset=UTF-8", "");
|
||||
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");
|
||||
QFile img(path);
|
||||
QVERIFY(img.open(QFile::ReadOnly));
|
||||
|
Loading…
x
Reference in New Issue
Block a user