[crashlog] Change heuristic to stripping the meta data from crashlogs

Instead trying to pro-actively determine if the first line in a
crashlog contains meta data, change the heuristic to do the following:

 1. To trying to parse the whole file. If that fails, then:
 2. Strip the first line and try parsing the remainder of the file. If
    that fails, then:
 3. Fall back to the textual crashlog parser.

rdar://88580543

Differential revision: https://reviews.llvm.org/D119755
This commit is contained in:
Jonas Devlieghere 2022-02-14 12:12:54 -08:00
parent d52866e1a8
commit 343662a028

View file

@ -397,7 +397,7 @@ class CrashLogFormatException(Exception):
class CrashLogParseException(Exception):
pass
pass
class CrashLogParser:
@ -414,22 +414,22 @@ class JSONCrashLogParser:
self.verbose = verbose
self.crashlog = CrashLog(debugger, self.path, self.verbose)
def parse_json(self, buffer):
try:
return json.loads(buffer)
except:
# The first line can contain meta data. Try stripping it and try
# again.
head, _, tail = buffer.partition('\n')
return json.loads(tail)
def parse(self):
with open(self.path, 'r') as f:
buffer = f.read()
# Skip the first line if it contains meta data.
head, _, tail = buffer.partition('\n')
try:
metadata = json.loads(head)
if 'app_name' in metadata and 'app_version' in metadata:
buffer = tail
except ValueError:
pass
try:
self.data = json.loads(buffer)
except ValueError:
self.data = self.parse_json(buffer)
except:
raise CrashLogFormatException()
try: