From e78f89b0d897bf479737bfca0b4c2a6d6523368f Mon Sep 17 00:00:00 2001 From: Miika Turkia Date: Sat, 7 Oct 2017 14:45:42 +0300 Subject: Safeguards for Liquivision import I have received one sample log where after parsing a bunch of dives properly, the sample count hits zero, and after that it is astronomical. In case of zero, the only data we have is dive date and time of a duplicate dive that we already parsed with proper dive profile. So preventing a crash with this hack without properly understanding the weird file format. Signed-off-by: Miika Turkia --- core/liquivision.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'core/liquivision.c') diff --git a/core/liquivision.c b/core/liquivision.c index 8ed358a0f..f0762409c 100644 --- a/core/liquivision.c +++ b/core/liquivision.c @@ -278,6 +278,15 @@ static void parse_dives (int log_version, const unsigned char *buf, unsigned int algorithm = *(buf + ptr++); // 0=ZH-L16C+GF sample_count = array_uint32_le(buf + ptr); } + + if (sample_count == 0) { + fprintf(stderr, "DEBUG: sample count 0 - terminating parser\n"); + break; + } + if (ptr + sample_count * 4 + 4 > buf_size) { + fprintf(stderr, "DEBUG: BOF - terminating parser\n"); + break; + } // we aren't using the start_cns, dive_mode, and algorithm, yet (void)start_cns; (void)dive_mode; -- cgit v1.2.3-70-g09d2