Skip adding value lines for accidental matches.

If the value_line regex matches, and the symbol file happens to exist
as a directory, we'd call addr2line and crash. Fix this so that calling
addr2line on a directory doesn't happen.

There isn't an easy way to test this, but I added a single new unit test. The
real test was to use a tombstone file that used to crash, but no longer crashes.

Test: Wrote new unit test, ran over a tombstone file that used to crash.
Change-Id: I4331e3b032cee8d697d1b7f409638750c61971d6
This commit is contained in:
Christopher Ferris
2016-09-19 13:24:37 -07:00
parent cc3a31fbe6
commit 5f1b4f0d9e
2 changed files with 27 additions and 13 deletions

View File

@@ -409,19 +409,21 @@ class TraceConverter:
else:
info = symbol.SymbolInformation(area, value)
(source_symbol, source_location, object_symbol_with_offset) = info.pop()
if not source_symbol:
if symbol_present:
source_symbol = symbol.CallCppFilt(symbol_name)
else:
source_symbol = "<unknown>"
if not source_location:
source_location = area
if not object_symbol_with_offset:
object_symbol_with_offset = source_symbol
self.value_lines.append((addr,
value,
object_symbol_with_offset,
source_location))
# If there is no information, skip this.
if source_symbol or source_location or object_symbol_with_offset:
if not source_symbol:
if symbol_present:
source_symbol = symbol.CallCppFilt(symbol_name)
else:
source_symbol = "<unknown>"
if not source_location:
source_location = area
if not object_symbol_with_offset:
object_symbol_with_offset = source_symbol
self.value_lines.append((addr,
value,
object_symbol_with_offset,
source_location))
return ret
@@ -499,5 +501,13 @@ class LongASANStackTests(unittest.TestCase):
self.assertGreater(trace_line_count, 10)
tc.PrintOutput(tc.trace_lines, tc.value_lines)
class ValueLinesTest(unittest.TestCase):
def test_value_line_skipped(self):
tc = TraceConverter()
symbol.SetAbi(["ABI: 'arm'"])
tc.UpdateAbiRegexes()
tc.ProcessLine(" 12345678 00001000 .")
self.assertEqual([], tc.value_lines)
if __name__ == '__main__':
unittest.main()