QOffsetStringArray: add contains() method
... use it in QNetworkReplyWasmImpl. Change-Id: I648f02fcafda43af7ed9771cc1c7e2e2a6d38504 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
4d43b995bf
commit
1ecbab76b6
@ -63,6 +63,15 @@ public:
|
|||||||
|
|
||||||
constexpr int count() const { return int(m_offsets.size()) - 1; }
|
constexpr int count() const { return int(m_offsets.size()) - 1; }
|
||||||
|
|
||||||
|
bool contains(QByteArrayView needle, Qt::CaseSensitivity cs = Qt::CaseSensitive) const noexcept
|
||||||
|
{
|
||||||
|
for (qsizetype i = 0; i < count(); ++i) {
|
||||||
|
if (viewAt(i).compare(needle, cs) == 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
StaticString m_string;
|
StaticString m_string;
|
||||||
OffsetList m_offsets;
|
OffsetList m_offsets;
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
#include <QtCore/qcoreapplication.h>
|
#include <QtCore/qcoreapplication.h>
|
||||||
#include <QtCore/qfileinfo.h>
|
#include <QtCore/qfileinfo.h>
|
||||||
#include <QtCore/qthread.h>
|
#include <QtCore/qthread.h>
|
||||||
|
#include <QtCore/private/qoffsetstringarray_p.h>
|
||||||
#include <QtCore/private/qtools_p.h>
|
#include <QtCore/private/qtools_p.h>
|
||||||
|
|
||||||
#include <private/qnetworkaccessmanager_p.h>
|
#include <private/qnetworkaccessmanager_p.h>
|
||||||
@ -18,8 +19,12 @@
|
|||||||
#include <emscripten/fetch.h>
|
#include <emscripten/fetch.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
constexpr const char *BannedHeaders[] = {
|
|
||||||
|
static constexpr auto BannedHeaders = qOffsetStringArray(
|
||||||
"accept-charset",
|
"accept-charset",
|
||||||
"accept-encoding",
|
"accept-encoding",
|
||||||
"access-control-request-headers",
|
"access-control-request-headers",
|
||||||
@ -39,19 +44,14 @@ constexpr const char *BannedHeaders[] = {
|
|||||||
"trailer",
|
"trailer",
|
||||||
"transfer-encoding",
|
"transfer-encoding",
|
||||||
"upgrade",
|
"upgrade",
|
||||||
"via",
|
"via"
|
||||||
};
|
);
|
||||||
|
|
||||||
bool isUnsafeHeader(QLatin1StringView header)
|
bool isUnsafeHeader(QLatin1StringView header) noexcept
|
||||||
{
|
{
|
||||||
return header.startsWith(QStringLiteral("proxy-"), Qt::CaseInsensitive)
|
return header.startsWith("proxy-"_L1, Qt::CaseInsensitive)
|
||||||
|| header.startsWith(QStringLiteral("sec-"), Qt::CaseInsensitive)
|
|| header.startsWith("sec-"_L1, Qt::CaseInsensitive)
|
||||||
|| std::any_of(std::begin(BannedHeaders), std::end(BannedHeaders),
|
|| BannedHeaders.contains(header, Qt::CaseInsensitive);
|
||||||
[&header](const char *bannedHeader) {
|
|
||||||
return 0
|
|
||||||
== header.compare(QLatin1StringView(bannedHeader),
|
|
||||||
Qt::CaseInsensitive);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ class tst_QOffsetStringArray : public QObject
|
|||||||
private slots:
|
private slots:
|
||||||
void init();
|
void init();
|
||||||
void access();
|
void access();
|
||||||
|
void contains();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -89,6 +90,16 @@ void tst_QOffsetStringArray::access()
|
|||||||
QCOMPARE(messages[6], "");
|
QCOMPARE(messages[6], "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QOffsetStringArray::contains()
|
||||||
|
{
|
||||||
|
QVERIFY(!messages.contains(""));
|
||||||
|
QVERIFY( messages.contains("level - 0"));
|
||||||
|
std::string l2 = "level - 2"; // make sure we don't compare pointer values
|
||||||
|
QVERIFY( messages.contains(l2));
|
||||||
|
QByteArray L4 = "Level - 4";
|
||||||
|
QVERIFY( messages.contains(L4, Qt::CaseInsensitive));
|
||||||
|
QVERIFY(!messages.contains(L4, Qt::CaseSensitive));
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_APPLESS_MAIN(tst_QOffsetStringArray)
|
QTEST_APPLESS_MAIN(tst_QOffsetStringArray)
|
||||||
#include "tst_qoffsetstringarray.moc"
|
#include "tst_qoffsetstringarray.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user