diff options
author | Milian Wolff <milian.wolff@kdab.com> | 2018-10-23 19:10:35 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-05-03 12:43:26 +0000 |
commit | 9bcb42b50e2c12d873c50c3d33c3d90befa35c8f (patch) | |
tree | f11cfb16c37e43d24e3044d9f1f81531842af68f | |
parent | 123e9bd37a133ab5c085a83f50e06da565cf924f (diff) |
Skip unused data when we fail to fully parse an event
Additionally, print a warning. This uncovers an issue in the sample
parsing for perf data files with LBR callchains.
Change-Id: Ib87e54dc33013974691da155aae2037332bc82b8
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
-rw-r--r-- | app/perfdata.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/app/perfdata.cpp b/app/perfdata.cpp index e1bc69e..b3f18c8 100644 --- a/app/perfdata.cpp +++ b/app/perfdata.cpp @@ -67,6 +67,8 @@ PerfData::ReadStatus PerfData::processEvents(QDataStream &stream) bool sampleIdAll = attrs.sampleIdAll(); quint64 sampleType = attrs.sampleType(); + const auto oldPos = stream.device()->pos(); + switch (m_eventHeader.type) { case PERF_RECORD_MMAP: { PerfRecordMmap mmap(&m_eventHeader, sampleType, sampleIdAll); @@ -188,6 +190,12 @@ PerfData::ReadStatus PerfData::processEvents(QDataStream &stream) break; } + const auto parsedContentSize = stream.device()->pos() - oldPos; + if (parsedContentSize != contentSize) { + qWarning() << "Event not fully parsed" << m_eventHeader.type << contentSize << parsedContentSize; + stream.skipRawData(contentSize - parsedContentSize); + } + m_eventHeader.size = 0; return SignalFinished; |