mirror of
https://github.com/lutris/lutris
synced 2024-09-04 23:13:35 +00:00
Fix registry parsing with keys ending with double backslashes (Fixes #541)
This commit is contained in:
parent
fdd0f1821b
commit
99614a470f
|
@ -215,7 +215,11 @@ class WineRegistryKey(object):
|
||||||
if line.startswith('#'):
|
if line.startswith('#'):
|
||||||
self.add_meta(line)
|
self.add_meta(line)
|
||||||
elif line.startswith('"'):
|
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]
|
key = key[1:-1]
|
||||||
self.subkeys[key] = value
|
self.subkeys[key] = value
|
||||||
elif line.startswith('@'):
|
elif line.startswith('@'):
|
||||||
|
|
|
@ -98,3 +98,15 @@ class TestWineRegistryKey(TestCase):
|
||||||
self.assertEqual(key.name, 'Control Panel/Desktop')
|
self.assertEqual(key.name, 'Control Panel/Desktop')
|
||||||
self.assertEqual(key.raw_name, '[Control Panel\\\\Desktop]')
|
self.assertEqual(key.raw_name, '[Control Panel\\\\Desktop]')
|
||||||
self.assertRegexpMatches(key.raw_timestamp, r'\d+\s\d+')
|
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')
|
||||||
|
|
Loading…
Reference in a new issue