Purge redundant recoding of URL fragments from QByteArray
QUrl::fromEncodedComponent_helper() only existed to support some old methods deprecated since 5.0, that I recently removed. It was the only caller of qt_urlRecodeByteArray() aside from that function's own autotest. Both were private. Task-number: QTBUG-85700 Change-Id: I5d09fd44e768847ce51a1ae7043150922cb5314c Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
parent
f144507829
commit
d3c8757731
@ -3012,17 +3012,6 @@ QByteArray QUrl::toPercentEncoding(const QString &input, const QByteArray &exclu
|
||||
return input.toUtf8().toPercentEncoding(exclude, include);
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
\since 5.0
|
||||
Used in the setEncodedXXX compatibility functions. Converts \a ba to
|
||||
QString form.
|
||||
*/
|
||||
QString QUrl::fromEncodedComponent_helper(const QByteArray &ba)
|
||||
{
|
||||
return qt_urlRecodeByteArray(ba);
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn QByteArray QUrl::toPunycode(const QString &uc)
|
||||
\obsolete
|
||||
|
@ -279,10 +279,6 @@ public:
|
||||
NSURL *toNSURL() const Q_DECL_NS_RETURNS_AUTORELEASED;
|
||||
#endif
|
||||
|
||||
private:
|
||||
static QString fromEncodedComponent_helper(const QByteArray &ba);
|
||||
|
||||
public:
|
||||
static QString fromAce(const QByteArray &);
|
||||
static QByteArray toAce(const QString &);
|
||||
static QStringList idnWhitelist();
|
||||
|
@ -70,7 +70,6 @@ extern Q_AUTOTEST_EXPORT bool qt_nameprep(QString *source, int from);
|
||||
extern Q_AUTOTEST_EXPORT bool qt_check_std3rules(QStringView in);
|
||||
extern Q_AUTOTEST_EXPORT void qt_punycodeEncoder(QStringView in, QString *output);
|
||||
extern Q_AUTOTEST_EXPORT QString qt_punycodeDecoder(const QString &pc);
|
||||
extern Q_AUTOTEST_EXPORT QString qt_urlRecodeByteArray(const QByteArray &ba);
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
|
@ -695,52 +695,4 @@ qt_urlRecode(QString &appendTo, QStringView in,
|
||||
encoding, actionTable, false);
|
||||
}
|
||||
|
||||
// qstring.cpp
|
||||
bool qt_is_ascii(const char *&ptr, const char *end) noexcept;
|
||||
|
||||
/*!
|
||||
\internal
|
||||
\since 5.0
|
||||
|
||||
\a ba contains an 8-bit form of the component and it might be
|
||||
percent-encoded already. We can't use QString::fromUtf8 because it might
|
||||
contain non-UTF8 sequences. We can't use QByteArray::toPercentEncoding
|
||||
because it might already contain percent-encoded sequences. We can't use
|
||||
qt_urlRecode because it needs UTF-16 input.
|
||||
*/
|
||||
Q_AUTOTEST_EXPORT
|
||||
QString qt_urlRecodeByteArray(const QByteArray &ba)
|
||||
{
|
||||
if (ba.isNull())
|
||||
return QString();
|
||||
|
||||
// scan ba for anything above or equal to 0x80
|
||||
// control points below 0x20 are fine in QString
|
||||
const char *in = ba.constData();
|
||||
const char *const end = ba.constEnd();
|
||||
if (qt_is_ascii(in, end)) {
|
||||
// no non-ASCII found, we're safe to convert to QString
|
||||
return QString::fromLatin1(ba, ba.size());
|
||||
}
|
||||
|
||||
// we found something that we need to encode
|
||||
QByteArray intermediate = ba;
|
||||
intermediate.resize(ba.size() * 3 - (in - ba.constData()));
|
||||
uchar *out = reinterpret_cast<uchar *>(intermediate.data() + (in - ba.constData()));
|
||||
for ( ; in < end; ++in) {
|
||||
if (*in & 0x80) {
|
||||
// encode
|
||||
*out++ = '%';
|
||||
*out++ = encodeNibble(uchar(*in) >> 4);
|
||||
*out++ = encodeNibble(uchar(*in) & 0xf);
|
||||
} else {
|
||||
// keep
|
||||
*out++ = uchar(*in);
|
||||
}
|
||||
}
|
||||
|
||||
// now it's safe to call fromLatin1
|
||||
return QString::fromLatin1(intermediate, out - reinterpret_cast<uchar *>(intermediate.data()));
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -84,8 +84,6 @@ private Q_SLOTS:
|
||||
void encodingRecode();
|
||||
void encodingRecodeInvalidUtf8_data();
|
||||
void encodingRecodeInvalidUtf8();
|
||||
void recodeByteArray_data();
|
||||
void recodeByteArray();
|
||||
};
|
||||
#include "tst_qurlinternal.moc"
|
||||
|
||||
@ -1067,34 +1065,4 @@ void tst_QUrlInternal::encodingRecodeInvalidUtf8()
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QUrlInternal::recodeByteArray_data()
|
||||
{
|
||||
QTest::addColumn<QByteArray>("input");
|
||||
QTest::addColumn<QString>("expected");
|
||||
|
||||
QTest::newRow("null") << QByteArray() << QString();
|
||||
QTest::newRow("empty") << QByteArray("") << QString("");
|
||||
QTest::newRow("normal") << QByteArray("Hello") << "Hello";
|
||||
QTest::newRow("valid-utf8") << QByteArray("\xc3\xa9") << "%C3%A9";
|
||||
QTest::newRow("percent-encoded") << QByteArray("%C3%A9%00%C0%80") << "%C3%A9%00%C0%80";
|
||||
QTest::newRow("invalid-utf8-1") << QByteArray("\xc3\xc3") << "%C3%C3";
|
||||
QTest::newRow("invalid-utf8-2") << QByteArray("\xc0\x80") << "%C0%80";
|
||||
|
||||
// note: percent-encoding the control characters ("\0" -> "%00") would also
|
||||
// be correct, but it's unnecessary for this function
|
||||
QTest::newRow("binary") << QByteArray("\0\x1f", 2) << QString::fromLatin1("\0\x1f", 2);;
|
||||
QTest::newRow("binary+percent-encoded") << QByteArray("\0%25", 4) << QString::fromLatin1("\0%25", 4);
|
||||
}
|
||||
|
||||
void tst_QUrlInternal::recodeByteArray()
|
||||
{
|
||||
QFETCH(QByteArray, input);
|
||||
QFETCH(QString, expected);
|
||||
QString output = qt_urlRecodeByteArray(input);
|
||||
|
||||
QCOMPARE(output.isNull(), input.isNull());
|
||||
QCOMPARE(output.isEmpty(), input.isEmpty());
|
||||
QCOMPARE(output, expected);
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN(tst_QUrlInternal)
|
||||
|
Loading…
x
Reference in New Issue
Block a user