diff --git a/src/distro/distro.py b/src/distro/distro.py index 0dd55f2..85857ff 100755 --- a/src/distro/distro.py +++ b/src/distro/distro.py @@ -1185,10 +1185,22 @@ def _parse_os_release_content(lines: TextIO) -> Dict[str, str]: A dictionary containing all information items. """ props = {} - lexer = shlex.shlex(lines, posix=True) - lexer.whitespace_split = True + try: + lexer = shlex.shlex(lines, posix=True) + lexer.whitespace_split = True + tokens = list(lexer) + except ValueError: + if hasattr(lines, "seek"): + lines.seek(os.SEEK_SET) + tokens = [] + for line in lines: + line = line.strip() + if not line or line.startswith("#"): + continue + if "=" in line: + k, v = line.split("=", 1) + tokens.append(f"{k}={v.strip('\"\'')}") - tokens = list(lexer) for token in tokens: # At this point, all shell-like parsing has been done (i.e. # comments processed, quotes and backslash escape sequences