Improve the VersionCheck static typing
authorAlexander Popov <alex.popov@linux.com>
Mon, 13 May 2024 23:10:36 +0000 (02:10 +0300)
committerAlexander Popov <alex.popov@linux.com>
Mon, 13 May 2024 23:16:59 +0000 (02:16 +0300)
kernel_hardening_checker/__init__.py
kernel_hardening_checker/engine.py

index a1c8e06b3a87c1b2c615bc66e93cacd9da0b930c..bb4af6c1fedeb5991df48a57eaa42424445a9920 100644 (file)
@@ -55,7 +55,7 @@ def detect_kernel_version(fname: str) -> Tuple[TupleOrNone, str]:
                 ver_str = parts[2].split('-', 1)[0]
                 ver_numbers = ver_str.split('.')
                 if len(ver_numbers) >= 3:
-                    if all(map(lambda x: x.isdigit(), ver_numbers)):
+                    if all(map(lambda x: x.isdecimal(), ver_numbers)):
                         return tuple(map(int, ver_numbers)), 'OK'
                 msg = f'failed to parse the version "{parts[2]}"'
                 return None, msg
index 0f187814a0dd3fda93f32a68d1e5b9eba12322aa..569809afee3180d47235877b7d747922713fdf1a 100644 (file)
@@ -16,8 +16,8 @@ import sys
 
 from typing import Union, Optional, List, Dict, Tuple
 StrOrNone = Optional[str]
-TupleOrNone = Optional[Tuple]
-DictOrTuple = Union[Dict[str, str], Tuple]
+TupleOrNone = Optional[Tuple[int, ...]]
+DictOrTuple = Union[Dict[str, str], Tuple[int, ...]]
 StrOrBool = Union[str, bool]
 
 GREEN_COLOR = '\x1b[32m'
@@ -161,16 +161,18 @@ class VersionCheck:
         assert(all(map(lambda x: isinstance(x, int), ver_expected))), \
                f'invalid expected version "{ver_expected}" for VersionCheck (2)'
         self.ver_expected = ver_expected
-        self.ver = (0, 0, 0) # type: Tuple[int, int, int]
+        self.ver = (0, 0, 0) # type: Tuple[int, ...]
         self.result = None # type: str | None
 
     @property
     def opt_type(self) -> str:
         return 'version'
 
-    def set_state(self, data: Tuple) -> None:
+    def set_state(self, data: Tuple[int, ...]) -> None:
         assert(data and isinstance(data, tuple) and len(data) >= 3), \
-               f'invalid version "{data}" for VersionCheck'
+               f'invalid version "{data}" for VersionCheck (1)'
+        assert(all(map(lambda x: isinstance(x, int), data))), \
+               f'invalid version "{data}" for VersionCheck (2)'
         self.ver = data[:3]
 
     def check(self) -> None: