From: Christian Heller <c.heller@plomlompom.de>
Date: Wed, 1 Jul 2020 19:48:51 +0000 (+0200)
Subject: Add a minimal amount of input validation.
X-Git-Url: https://plomlompom.com/repos/conditions?a=commitdiff_plain;h=b545a75f33571b49f279d825adc3ae8d209ed2c2;p=berlin-corona-table

Add a minimal amount of input validation.
---

diff --git a/enhance_table.py b/enhance_table.py
index 2b6bb8d..2a89c4b 100755
--- a/enhance_table.py
+++ b/enhance_table.py
@@ -27,6 +27,31 @@ f = open(infections_table, 'r')
 lines = f.readlines()
 f.close()
 
+# Basic input validation.
+import datetime
+header_elements = lines[0].split()
+if set(header_elements) != district_pops.keys() or \
+       len(header_elements) != len(district_pops.keys()):
+    raise Exception('infections table: invalid header')
+line_count = 0
+for line in lines[1:]:
+    line_count += 1
+    fields = line.split()
+    if len(header_elements) != len(fields) - 1:
+        raise Exception('infections table: too many elements on line %s',
+                        line_count)
+    try:
+        datetime.date.fromisoformat(fields[0])
+    except ValueError:
+        raise Exception('infections table: bad ISO date on line %s',
+                        line_count)
+    for field in fields[1:]:
+        try:
+            int(field)
+        except ValueError:
+            raise Exception('infections table: bad value on line %s',
+                            line_count)
+
 # Parse first table file line for the names and order of districts.
 db = {}
 sorted_districts = []