diff options
author | Orgad Shaneh <orgad.shaneh@audiocodes.com> | 2019-05-07 08:42:03 +0300 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2019-05-07 08:32:11 +0000 |
commit | 09fe1247d5cfd993923362ac4f886502511303c6 (patch) | |
tree | 18698fa81f35f504113390f244c6d7e1e5515968 | |
parent | 283e1ce2fbbb729b0e5d117ddbea190827ef7144 (diff) |
PerfParser: Fix signedness mismatch on comparison
Detected by GCC9.
Change-Id: I30b1cc0bd91eecc973d2a64d3acd648a486c203e
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r-- | app/perftracingdata.cpp | 2 | ||||
-rw-r--r-- | app/perfunwind.cpp | 8 | ||||
-rw-r--r-- | tests/auto/perfdata/tst_perfdata.cpp | 2 |
3 files changed, 6 insertions, 6 deletions
diff --git a/app/perftracingdata.cpp b/app/perftracingdata.cpp index a50069e..2f9417a 100644 --- a/app/perftracingdata.cpp +++ b/app/perftracingdata.cpp @@ -54,7 +54,7 @@ static bool checkMagic(QDataStream &stream, const QByteArray &magic) template<typename Number> static bool checkSize(Number size) { - if (size > std::numeric_limits<int>::max()) { + if (sizeof(Number) >= sizeof(int) && size > Number(std::numeric_limits<int>::max())) { qWarning() << "Excessively large section in tracing data" << size; return false; } diff --git a/app/perfunwind.cpp b/app/perfunwind.cpp index 9f8c1b4..904fcbf 100644 --- a/app/perfunwind.cpp +++ b/app/perfunwind.cpp @@ -550,9 +550,9 @@ QVariant readTraceItem(const QByteArray &data, quint32 offset, quint32 size, boo QVariant PerfUnwind::readTraceData(const QByteArray &data, const FormatField &field, bool byteSwap) { // TODO: validate that it actually works like this. - if (field.offset > std::numeric_limits<int>::max() - || field.size > std::numeric_limits<int>::max() - || field.offset + field.size > std::numeric_limits<int>::max() + if (field.offset > quint32(std::numeric_limits<int>::max()) + || field.size > quint32(std::numeric_limits<int>::max()) + || field.offset + field.size > quint32(std::numeric_limits<int>::max()) || static_cast<int>(field.offset + field.size) > data.length()) { return QVariant::Invalid; } @@ -650,7 +650,7 @@ void PerfUnwind::analyze(const PerfRecordSample &sample) const auto &attribute = m_attributes.at(attributesId); if (attribute.type() == PerfEventAttributes::TYPE_TRACEPOINT) { type = TracePointSample; - if (attribute.config() > std::numeric_limits<qint32>::max()) + if (attribute.config() > quint64(std::numeric_limits<qint32>::max())) qWarning() << "Excessively large event format ID" << attribute.config(); else eventFormatId = static_cast<qint32>(attribute.config()); diff --git a/tests/auto/perfdata/tst_perfdata.cpp b/tests/auto/perfdata/tst_perfdata.cpp index 150fb65..41f80d3 100644 --- a/tests/auto/perfdata/tst_perfdata.cpp +++ b/tests/auto/perfdata/tst_perfdata.cpp @@ -165,7 +165,7 @@ void TestPerfData::testTracingData() const PerfParserTestClient::AttributeEvent attribute = client.attribute(sample.attributeId); QCOMPARE(attribute.type, 2u); - QVERIFY(attribute.config <= std::numeric_limits<qint32>::max()); + QVERIFY(attribute.config <= quint64(std::numeric_limits<qint32>::max())); const PerfParserTestClient::TracePointFormatEvent format = client.tracePointFormat(static_cast<qint32>(attribute.config)); QCOMPARE(client.string(format.system), QByteArray("probe_untitled1")); |