Fix registry parsing with keys ending with double backslashes (Fixes #541)

This commit is contained in:
Mathieu Comandon 2017-03-13 21:08:12 -07:00
parent fdd0f1821b
commit 99614a470f
2 changed files with 17 additions and 1 deletions

View file

@ -215,7 +215,11 @@ class WineRegistryKey(object):
if line.startswith('#'):
self.add_meta(line)
elif line.startswith('"'):
key, value = re.split(re.compile(r'(?<=[^\\]\")='), line, maxsplit=1)
try:
key, value = re.split(re.compile(r"(?<![^\\]\\\")="), line, maxsplit=1)
except ValueError as ex:
logger.error("Unable to parse line %s", line)
raise
key = key[1:-1]
self.subkeys[key] = value
elif line.startswith('@'):

View file

@ -98,3 +98,15 @@ class TestWineRegistryKey(TestCase):
self.assertEqual(key.name, 'Control Panel/Desktop')
self.assertEqual(key.raw_name, '[Control Panel\\\\Desktop]')
self.assertRegexpMatches(key.raw_timestamp, r'\d+\s\d+')
def test_parse_registry_key(self):
key = WineRegistryKey(path='Control Panel/Desktop')
key.parse('"C:\\\\users\\\\strider\\\\My Music\\\\iTunes\\\\iTunes Music\\\\Podcasts\\\\"=dword:00000001')
self.assertEqual(key.subkeys["C:\\\\users\\\\strider\\\\My Music\\\\iTunes\\\\iTunes Music\\\\Podcasts\\\\"],
'dword:00000001')
key.parse('"A"=val')
self.assertEqual(key.subkeys["A"], 'val')
key.parse('"String with \\"quotes\\""=val')
self.assertEqual(key.subkeys['String with \\"quotes\\"'], 'val')