1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-10-06 14:53:21 +02:00

Added struct size padding asserts to FIT parser

This commit is contained in:
Martin Tůma 2016-11-05 17:32:15 +01:00
parent 66ce91c237
commit 584245785e
2 changed files with 15 additions and 0 deletions

11
src/assert.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef ASSERT_H
#define ASSERT_H
template<bool> struct CompileTimeAssert;
template<> struct CompileTimeAssert <true> {};
#define STATIC_ASSERT(e) \
(CompileTimeAssert <(e) != 0>())
#endif // ASSERT_H

View File

@ -1,5 +1,6 @@
#include <cstring> #include <cstring>
#include <QtEndian> #include <QtEndian>
#include "assert.h"
#include "fitparser.h" #include "fitparser.h"
@ -122,6 +123,7 @@ bool FITParser::parseDefinitionMessage(quint8 header)
// definition records // definition records
def->fields = new Field[def->numFields]; def->fields = new Field[def->numFields];
for (i = 0; i < def->numFields; i++) { for (i = 0; i < def->numFields; i++) {
STATIC_ASSERT(sizeof(def->fields[i]) == 3);
if (!readData((char*)&(def->fields[i]), sizeof(def->fields[i]))) if (!readData((char*)&(def->fields[i]), sizeof(def->fields[i])))
return false; return false;
_len -= sizeof(def->fields[i]); _len -= sizeof(def->fields[i]);
@ -134,6 +136,7 @@ bool FITParser::parseDefinitionMessage(quint8 header)
def->devFields = new Field[def->numDevFields]; def->devFields = new Field[def->numDevFields];
for (i = 0; i < def->numDevFields; i++) { for (i = 0; i < def->numDevFields; i++) {
STATIC_ASSERT(sizeof(def->devFields[i]) == 3);
if (!readData((char*)&(def->devFields[i]), if (!readData((char*)&(def->devFields[i]),
sizeof(def->devFields[i]))) sizeof(def->devFields[i])))
return false; return false;
@ -302,6 +305,7 @@ bool FITParser::parseHeader()
quint16 crc; quint16 crc;
qint64 len; qint64 len;
STATIC_ASSERT(sizeof(hdr) == 12);
len = _device->read((char*)&hdr, sizeof(hdr)); len = _device->read((char*)&hdr, sizeof(hdr));
if (len < 0) { if (len < 0) {
_errorString = "I/O error"; _errorString = "I/O error";