--- meliae/_loader.pyx 2013-02-20 15:10:29.000000000 +1100 +++ meliae/_loader.pyx 2013-02-20 15:15:40.000000000 +1100 @@ -577,6 +577,8 @@ else: # TODO: This isn't perfect, as it doesn't do proper json # escaping + if '"' in self.value: + raise AssertionError(self.value) value = '"value": "%s", ' % self.value else: value = '' --- meliae/loader.py 2012-10-18 06:28:05.000000000 +1100 +++ meliae/loader.py 2013-02-14 17:18:52.000000000 +1100 @@ -50,7 +50,7 @@ r', "size": (?P\d+)' r'(, "name": "(?P.*)")?' r'(, "len": (?P\d+))?' - r'(, "value": "?(?P.*)"?)?' + r'(, "value": (?P"?)(?P.*)(?P=valuequote))?' r', "refs": \[(?P[^]]*)\]' r'\}') --- meliae/tests/test_loader.py#1 2012-10-18 06:28:05.000000000 +1100 +++ meliae/tests/test_loader.py 2013-05-14 18:06:24.000000000 +1000 @@ -135,7 +135,7 @@ '{"address": 2345, "type": "module", "size": 60, "name": "mymod"' ', "refs": [1234]}', '{"address": 4567, "type": "str", "size": 150, "len": 126' - ', "value": "Test \\\'whoami\\\'\\u000a\\"Your name\\"' + ', "value": "Test \\\'whoami\\\'\\u000a\\"Your name\\""' ', "refs": []}' ], using_json=False, show_prog=False).objs keys = sorted(objs.keys()) @@ -150,10 +150,7 @@ self.assertEqual("module", obj.type_str) self.assertEqual("mymod", obj.value) obj = objs[4567] - # Known failure? We don't unescape properly, also, I'm surprised this - # works. " should exit the " string, but \" seems to leave it. But the - # '\' is also left verbatim because it is a raw string... - self.assertEqual(r"Test \'whoami\'\u000a\"Your name\"", obj.value) + self.assertEqual("Test \\'whoami\\'\\u000a\\\"Your name\\\"", obj.value) def test_load_example(self): objs = loader.load(_example_dump, show_prog=False)