From f5a91fcda1bab0e7ff6efb8971a3956a2c8a6eb0 Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Sun, 2 Feb 2014 14:55:49 +0000 Subject: [PATCH] Revert "Fix SEGV on bad file/header in FitRideFile" This reverts commit c8e1f95114100440b72cbc0ea27a8aea7637cfe4. --- src/FitRideFile.cpp | 77 +++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 45 deletions(-) diff --git a/src/FitRideFile.cpp b/src/FitRideFile.cpp index 184b0279f..07903877c 100644 --- a/src/FitRideFile.cpp +++ b/src/FitRideFile.cpp @@ -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) {