Fix parsing the eeprom when there are users with no records
authorAntonio Ospite <ao2@ao2.it>
Wed, 4 Nov 2015 12:54:28 +0000 (13:54 +0100)
committerAntonio Ospite <ao2@ao2.it>
Wed, 4 Nov 2015 12:54:28 +0000 (13:54 +0100)
When the number of records for a given user is 0, there is a dummy byte
at the end of the user memory block which has to be consumed as well,
otherwise the while loop never ends.

The bug was found out by Cornelis Broeders <cornelis.broeders@web.de>

README
src/visomat-data-downloader.c

diff --git a/README b/README
index 10b889e..f8a07e9 100644 (file)
--- a/README
+++ b/README
@@ -68,3 +68,19 @@ The structure can be better visualized when split in fields:
   440601 1319 0 114 063 066
   100101 1400 0 114 070 071
   130312 1145 0 121 080 072
+
+When the number of records is 0, there is a dummy byte at the end of the user
+memory block, e.g.:
+
+  M1001M20115110321300134097083
+
+The structure is:
+
+  M
+  1
+  00
+  1   # dummy byte, present only when the previous field is 00
+  M
+  2
+  01
+  151103 2130 0 134 097 083
index c2b8590..97da8e8 100644 (file)
@@ -156,6 +156,13 @@ static int decode_eeprom(unsigned char *buffer,
                        /* user_id and num_records take 3 bytes */
                        i += 3;
 
+                       /*
+                        * when there are no records, there is a dummy byte
+                        * which has to be consumed
+                        */
+                       if (num_records == 0)
+                               i += 1;
+
                        for (j = 0; j < num_records; j++) {
                                ret = extract_datetime(buffer + i, &d);
                                if (ret < 0)