From 097c9caf7771fbbc70876f058f7af4ac57c51cf5 Mon Sep 17 00:00:00 2001 From: Mark Liversedge Date: Sun, 5 Feb 2012 09:31:34 +0000 Subject: [PATCH] Fix SEGV on empty/dodgy FIT files Fixes #633. --- src/FitRideFile.cpp | 10 ++++++---- src/test/rides/2012_01_11_11_51_01.fit | Bin 0 -> 39460 bytes src/test/rides/2012_02_05_09_03_59.fit | Bin 0 -> 882 bytes 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 src/test/rides/2012_01_11_11_51_01.fit create mode 100644 src/test/rides/2012_02_05_09_03_59.fit diff --git a/src/FitRideFile.cpp b/src/FitRideFile.cpp index a8c1db7eb..105199f68 100644 --- a/src/FitRideFile.cpp +++ b/src/FitRideFile.cpp @@ -289,6 +289,8 @@ struct FitFileReaderState time_t time = 0; if (time_offset > 0) time = last_time + time_offset; + else + time = last_time; int i = 0; time_t this_start_time = 0; ++interval; @@ -304,11 +306,11 @@ struct FitFileReaderState default: ; // ignore it } } - if (this_start_time == 0) - errors << QString("lap %1 has no start time").arg(interval); + if (this_start_time == 0 || this_start_time-start_time < 0) + errors << QString("lap %1 has invalid start time").arg(interval); else { - rideFile->addInterval(this_start_time - start_time, time - start_time, - QString("%1").arg(interval)); + if (rideFile->dataPoints().count()) // no samples means no laps.. + rideFile->addInterval(this_start_time - start_time, time - start_time, QString("%1").arg(interval)); } } diff --git a/src/test/rides/2012_01_11_11_51_01.fit b/src/test/rides/2012_01_11_11_51_01.fit new file mode 100644 index 0000000000000000000000000000000000000000..fdd16951a18b32c14709ca87efb3a29b3cfb8129 GIT binary patch literal 39460 zcmaIf1#nbJyEpIz5@0&GyEg9b?(VwiqLWN~B5071%uGCx;O_43&f>N>EUt?#E}ie+ z&ogJUFLmpCt8UfJ?r+;pd-pk$F>4c-+_PO=Dz$3cqlpXtmoBYaw3}OmYnt#hX~Nyp zguA%npM^hr7**b{tgA~#x0DpOrY6-6&e2 zV@`tz(z&Mba7~kTIYQIPNOAs8Ck0WbxZwZjU+Q>L|K;VhZ}FFF#{c7A8Ys>G?_Z`J z{r~wd-9l4RTDZ96b`eNAr!oza=$Z!Ec6W6_iqpHM$$&p~qFr6n;-4eZmM$(iT{7wa z!fmRn+f;YA2oJZZ$Zxtd;px+ao6=0-0EBCrOs=l(`ai8P-7eEk3RTXmg&j5d6hJ^> zDLqq!`wD=1GwpKt_)yi+jq)CL#8f2zzhD)><#~45Iy6*u5eyEQIu<0*8zHO#=&-~t z_XLKjY~gAasB+KEV87{QAqt^?if~&GK>5pnf8?(Jdb7qZ zmw1P&zw#RVEhV`fxcdfxm+S3vq*thVSAfAj)1bmSymmUmZ2$!i*=6XEQ1zf9gFPlY zMW}(>9wS0spzizdm-U8Sj_VbwMx%IjIJ-@EIRkyc4;q}(cNl+7cxIQCI)|#_Jq-T* z-_YHU1MK@^mxJ1csun{HFp5A&oxT$Qe|^V8X&b8AjxazO%3&`JP6A9yu}e$qQ1yq| z0LLkZy>t@pquHw3qH0RL7QxAVqdlz|KQ>v~>?^k@{SicK~C zISLIP0xas~kk%5YH2Vy&u^2_6!E=B~qa3nW z_D~ggk-=e;m7_o{aDM|(dbC5{{2rqAJZ5mj^oT(}RFi)IQmgR?{M9|&A@4m7QLR2P zKWYl(XQ(6m0+21rAq!p#QKQnjy6BV~HGQD)dLcabuK?cB4w>$3hPx&WjF*p}>&UuTA>A?VaO1Ci8jy67Bc0GP7SA-_xwQSWLPU@O(q zE;@%90YT`1g{6#tJqHAIn0N+gx`O`Nv}fbjT;YLsX>!3{INda{n7bK7e^g z9dcjS5H;X;2B%E3^AgaFF+aef;|@8ZQ;51X(g0TKLOW?t7+}*`fF>boNdSX0rh%!T z6u{Dl4*98gh-&L#aMo0TszN7S4y6HJJa)+1MM6~17z50rXF;GWK>HUC*)&gx+Lg@U zoT)fH3j$RE%-Zflf2{#FGtkeXHo&HIQF6kaVAXd&gY%{zTu{9L>H_>GqU4c3 zgO%%11{Y1aI0Oyq0~F63C3Bt&R@?qyaM_eX537?NDH;MC&K4!-9S>G@&NH}TO5t+Q z534aiSgt6!Yk#m(R~YGtX=@MnncNGLxPo8J_h$pbtnx1 z`f>LL_zNNQ7!a%q6f{6q0;6><`T*ny*x4soJuJ-NzG*c@F+umJeF5?zkp+7Mt6|ar zD+x^09msD04H`tr#qERDmr@28Pfc&Cp1lkJ7+Eh$7HSc!)|Y4S(DaCaqdUMLfEW~Y z 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 b8{i>&N&fcr2wZvy=%<|25zAZ1`$vBPYhxDl literal 0 HcmV?d00001