From: Marcus Comstedt Date: Sun, 26 Feb 2017 12:07:03 +0000 (+0100) Subject: Return SRD_ERR_ARG from srd_inst_decode if samplenums are wrong X-Git-Tag: libsigrokdecode-0.5.0~76 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=de23c992a48b5f9f145a7c26a62f10cd5b87b218;p=libsigrokdecode.git Return SRD_ERR_ARG from srd_inst_decode if samplenums are wrong This validates the requirements that * abs_start_samplenum continues where the previous decode ended * abs_end_samplenum is not lower than abs_start_samplenum Failure to meet these requirements will make v3 decoders crash. --- diff --git a/instance.c b/instance.c index a1de957..0e27ca3 100644 --- a/instance.c +++ b/instance.c @@ -1010,6 +1010,12 @@ SRD_PRIV int srd_inst_decode(struct srd_decoder_inst *di, return SRD_ERR_ARG; } + if (abs_start_samplenum != di->abs_cur_samplenum || + abs_end_samplenum < abs_start_samplenum) { + srd_dbg("incorrect sample numbers"); + return SRD_ERR_ARG; + } + di->data_unitsize = unitsize; srd_dbg("Decoding: abs start sample %" PRIu64 ", abs end sample %" @@ -1042,6 +1048,7 @@ SRD_PRIV int srd_inst_decode(struct srd_decoder_inst *di, di->inst_id); return SRD_ERR_PYTHON; } + di->abs_cur_samplenum = abs_end_samplenum; Py_DecRef(py_res); } else { /* If this is the first call, start the worker thread. */