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