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
diff --git a/scripts/stack_core.py b/scripts/stack_core.py
index 688d391..e3910ff 100755
--- a/scripts/stack_core.py
+++ b/scripts/stack_core.py
@@ -409,19 +409,21 @@
       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 @@
     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()
diff --git a/scripts/symbol.py b/scripts/symbol.py
index ddb947a..280c95f 100755
--- a/scripts/symbol.py
+++ b/scripts/symbol.py
@@ -189,6 +189,10 @@
     if not os.path.exists(symbols):
       return None
 
+  # Make sure the symbols path is not a directory.
+  if os.path.isdir(symbols):
+    return None
+
   cmd = [ToolPath("addr2line"), "--functions", "--inlines",
       "--demangle", "--exe=" + symbols]
   child = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)