Do not parse registry lines that are too short and do not crash on invalid lines (Fixes #1168)

This commit is contained in:
Mathieu Comandon 2018-10-09 00:00:23 -07:00
parent aa75690e0d
commit 60eacc78f6

View file

@ -217,6 +217,11 @@ class WineRegistryKey(object):
return "{0} {1}".format(self.raw_name, self.raw_timestamp)
def parse(self, line):
"""Parse a registry line, populating meta and subkeys"""
if len(line) < 4:
# Line is too short, nothing to parse
return
if line.startswith('#'):
self.add_meta(line)
elif line.startswith('"'):
@ -224,12 +229,13 @@ class WineRegistryKey(object):
key, value = re.split(re.compile(r"(?<![^\\]\\\")="), line, maxsplit=1)
except ValueError as ex:
logger.error("Unable to parse line %s", line)
raise
logger.exception(ex)
return
key = key[1:-1]
self.subkeys[key] = value
elif line.startswith('@'):
k, v = line.split('=', 1)
self.subkeys['default'] = v
key, value = line.split('=', 1)
self.subkeys['default'] = value
def add_to_last(self, line):
last_subkey = list(self.subkeys.keys())[-1]