From: Gerhard Sittig Date: Sun, 22 Apr 2018 08:07:07 +0000 (+0200) Subject: dcf77: annotate invalid dow and month fields, do not abort execution X-Git-Url: https://sigrok.org/gitweb/?p=libsigrokdecode.git;a=commitdiff_plain;h=40935087ca8a2c63fb224228c3f7dcbe74d48d20;hp=aad263bb83593a66d4a834b30acf8e8a2f1b5c4c dcf77: annotate invalid dow and month fields, do not abort execution Emit error annotations for invalid day of the week or month numbers, instead of aborting decoder execution with an exception. Implementation detail: Neither the Python 'in' keyword nor a .get() method are available. That's why we have to catch the IndexError exception. This fixes bug #1173. --- diff --git a/decoders/dcf77/pd.py b/decoders/dcf77/pd.py index 4789b66..3a97d82 100644 --- a/decoders/dcf77/pd.py +++ b/decoders/dcf77/pd.py @@ -210,9 +210,13 @@ class Decoder(srd.Decoder): self.tmp |= (bit << (c - 42)) if c == 44: d = bcd2int(self.tmp) - dn = calendar.day_name[d - 1] # day_name[0] == Monday - self.putb([13, ['Day of week: %d (%s)' % (d, dn), - 'DoW: %d (%s)' % (d, dn)]]) + try: + dn = calendar.day_name[d - 1] # day_name[0] == Monday + self.putb([13, ['Day of week: %d (%s)' % (d, dn), + 'DoW: %d (%s)' % (d, dn)]]) + except IndexError: + self.putb([19, ['Day of week: %d (%s)' % (d, 'invalid'), + 'DoW: %d (%s)' % (d, 'inv')]]) elif c in range(45, 49 + 1): # Month (1-12): DCF77 bits 45-49 (BCD format). if c == 45: @@ -222,9 +226,13 @@ class Decoder(srd.Decoder): self.tmp |= (bit << (c - 45)) if c == 49: m = bcd2int(self.tmp) - mn = calendar.month_name[m] # month_name[1] == January - self.putb([14, ['Month: %d (%s)' % (m, mn), - 'Mon: %d (%s)' % (m, mn)]]) + try: + mn = calendar.month_name[m] # month_name[1] == January + self.putb([14, ['Month: %d (%s)' % (m, mn), + 'Mon: %d (%s)' % (m, mn)]]) + except IndexError: + self.putb([19, ['Month: %d (%s)' % (m, 'invalid'), + 'Mon: %d (%s)' % (m, 'inv')]]) elif c in range(50, 57 + 1): # Year (0-99): DCF77 bits 50-57 (BCD format). if c == 50: