X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=kconfig_hardened_check%2F__init__.py;h=832f241c40b7d2df50af1e20c6b06cdee08935ff;hb=822d781dcdbaf85be40156f1af745cd0fa7125fa;hp=a423358b932d8dd3cb82a6e5c9c64259d856e3b7;hpb=dc68441b86d36554134c202e955de48ba21f9193;p=kconfig-hardened-check.git diff --git a/kconfig_hardened_check/__init__.py b/kconfig_hardened_check/__init__.py index a423358..832f241 100644 --- a/kconfig_hardened_check/__init__.py +++ b/kconfig_hardened_check/__init__.py @@ -31,7 +31,7 @@ def _open(file: str, *args, **kwargs): def detect_arch(fname, archs): with _open(fname, 'rt', encoding='utf-8') as f: - arch_pattern = re.compile("CONFIG_[a-zA-Z0-9_]*=y") + arch_pattern = re.compile("CONFIG_[a-zA-Z0-9_]+=y$") arch = None for line in f.readlines(): if arch_pattern.match(line): @@ -40,7 +40,7 @@ def detect_arch(fname, archs): if arch is None: arch = option else: - return None, 'more than one supported microarchitecture is detected' + return None, 'detected more than one microarchitecture' if arch is None: return None, 'failed to detect microarchitecture' return arch, 'OK' @@ -48,7 +48,7 @@ def detect_arch(fname, archs): def detect_kernel_version(fname): with _open(fname, 'rt', encoding='utf-8') as f: - ver_pattern = re.compile("# Linux/.* Kernel Configuration") + ver_pattern = re.compile("# Linux/.+ Kernel Configuration$") for line in f.readlines(): if ver_pattern.match(line): line = line.strip() @@ -66,12 +66,10 @@ def detect_compiler(fname): gcc_version = None clang_version = None with _open(fname, 'rt', encoding='utf-8') as f: - gcc_version_pattern = re.compile("CONFIG_GCC_VERSION=[0-9]*") - clang_version_pattern = re.compile("CONFIG_CLANG_VERSION=[0-9]*") for line in f.readlines(): - if gcc_version_pattern.match(line): + if line.startswith('CONFIG_GCC_VERSION='): gcc_version = line[19:-1] - if clang_version_pattern.match(line): + if line.startswith('CONFIG_CLANG_VERSION='): clang_version = line[21:-1] if gcc_version is None or clang_version is None: return None, 'no CONFIG_GCC_VERSION or CONFIG_CLANG_VERSION' @@ -193,6 +191,8 @@ def parse_cmdline_file(parsed_options, fname): else: name = opt value = '' # '' is not None + if name in parsed_options: + sys.exit(f'[!] ERROR: cmdline option "{name}" exists multiple times') value = normalize_cmdline_options(name, value) parsed_options[name] = value