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 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: