diff -urN -U20 gpsbabel-1.4.4.orig/garmin_fit.c gpsbabel-1.4.4/garmin_fit.c
--- gpsbabel-1.4.4.orig/garmin_fit.c 2012-05-14 07:59:17.000000000 -0700
+++ gpsbabel-1.4.4/garmin_fit.c 2013-07-30 22:59:03.675857670 -0700
@@ -96,40 +96,46 @@
ver >> 4, ver & 0xf);
if (global_opts.debug_level >= 1) {
debug_print(1,"%s: protocol version=%d\n", MYNAME, ver);
}
// profile version
ver = gbfgetuint16(fin);
// data length
fit_data.len = gbfgetuint32(fin);
// File signature
is_fatal(gbfread(sig, 4, 1, fin) != 1,
MYNAME ": Unexpected end of file\n");
if (sig[0] != '.' || sig[1] != 'F' || sig[2] != 'I' || sig[3] != 'T') {
fatal(MYNAME ": .FIT signature missing\n");
}
if (global_opts.debug_level >= 1) {
debug_print(1,"%s: profile version=%d\n", MYNAME, ver);
debug_print(1,"%s: fit_data.len=%d\n", MYNAME, fit_data.len);
}
+
+ if (len > 12) {
+ is_fatal(len != 14, MYNAME ": .FIT header with unrecognized size\n");
+ // Unused according to Ingo Arndt
+ gbfgetuint16(fin);
+ }
}
static gbuint8
fit_getuint8(void)
{
int val;
if (fit_data.len == 0) {
// fail gracefully for GARMIN Edge 800 with newest firmware, seems to write a wrong record length
// for the last record.
//fatal(MYNAME ": record truncated: fit_data.len=0\n");
if (global_opts.debug_level >= 1) {
warning("%s: record truncated: fit_data.len=0\n", MYNAME);
}
return 0;
}
val = gbfgetc(fin);
if (val == EOF) {
fatal(MYNAME ": unexpected end of file with fit_data.len=%d\n",fit_data.len);
}