Revert "Fix SEGV on bad file/header in FitRideFile"

This reverts commit c8e1f95114.
This commit is contained in:
Mark Liversedge
2014-02-02 14:55:49 +00:00
committed by Gareth Coco
parent 7071aba591
commit f5a91fcda1

View File

@@ -689,57 +689,41 @@ struct FitFileReaderState
delete rideFile;
return NULL;
}
int header_size = read_uint8();
if (header_size != 12 && header_size != 14) {
errors << QString("bad header size: %1").arg(header_size);
file.close();
delete rideFile;
return NULL;
}
int protocol_version = read_uint8();
(void) protocol_version;
//
// read header
//
try {
// if the header size is 14 we have profile minor then profile major
// version. We still don't do anything with this information
int profile_version = read_uint16(false); // always littleEndian
(void) profile_version; // not sure what to do with this
// lets read the header
int header_size = read_uint8();
if (header_size != 12 && header_size != 14) {
errors << QString("bad header size: %1").arg(header_size);
file.close();
delete rideFile;
return NULL;
}
int protocol_version = read_uint8();
(void) protocol_version;
// if the header size is 14 we have profile minor then profile major
// version. We still don't do anything with this information
int profile_version = read_uint16(false); // always littleEndian
(void) profile_version; // not sure what to do with this
read_uint32(false); // always littleEndian
char fit_str[5];
if (file.read(fit_str, 4) != 4) {
errors << "truncated header";
file.close();
delete rideFile;
return NULL;
}
fit_str[4] = '\0';
if (strcmp(fit_str, ".FIT") != 0) {
errors << QString("bad header, expected \".FIT\" but got \"%1\"").arg(fit_str);
file.close();
delete rideFile;
return NULL;
}
// read the rest of the header
if (header_size == 14) read_uint16(false);
} catch (TruncatedRead &e) {
errors << "invalid file or header";
int data_size = read_uint32(false); // always littleEndian
char fit_str[5];
if (file.read(fit_str, 4) != 4) {
errors << "truncated header";
file.close();
delete rideFile;
return NULL;
}
fit_str[4] = '\0';
if (strcmp(fit_str, ".FIT") != 0) {
errors << QString("bad header, expected \".FIT\" but got \"%1\"").arg(fit_str);
file.close();
delete rideFile;
return NULL;
}
//
// Read data
//
// read the rest of the header
if (header_size == 14) read_uint16(false);
int bytes_read = 0;
int data_size = 0;
bool stop = false;
bool truncated = false;
try {
@@ -748,6 +732,9 @@ struct FitFileReaderState
}
catch (TruncatedRead &e) {
errors << "truncated file body";
//file.close();
//delete rideFile;
//return NULL;
truncated = true;
}
if (stop) {