summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2019-05-07 08:42:03 +0300
committerOrgad Shaneh <orgads@gmail.com>2019-05-07 08:32:11 +0000
commit09fe1247d5cfd993923362ac4f886502511303c6 (patch)
tree18698fa81f35f504113390f244c6d7e1e5515968
parent283e1ce2fbbb729b0e5d117ddbea190827ef7144 (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.cpp2
-rw-r--r--app/perfunwind.cpp8
-rw-r--r--tests/auto/perfdata/tst_perfdata.cpp2
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"));