def testClusterfuzzParserParseStacktrace(self): parser = ClusterfuzzParser() deps = {'src/': Dependency('src/', 'https://repo', '1')} stacktrace_string = textwrap.dedent(""" Blabla... ==1==ERROR: AddressSanitizer: stack-overflow on address 0x7ffec59ebec0 #0 0x7f5b944a37bb in a::aa(p* d) src/a.h:225 #1 0x7f5b9449a880 in b::bb(p* d) src/b.h:266:1 #2 0x7f5b9449a880 in c::cc(p* d) src/c.h:281 """) stacktrace = parser.Parse(stacktrace_string, deps, 'asan_job', SanitizerType.ADDRESS_SANITIZER) stack = CallStack(0, frame_list=[ StackFrame(0, 'src/', 'a::aa(p* d)', 'a.h', 'src/a.h', [225]), StackFrame(1, 'src/', 'b::bb(p* d)', 'b.h', 'src/b.h', [266, 267]), StackFrame(2, 'src/', 'c::cc(p* d)', 'c.h', 'src/c.h', [281]) ]) expected_stacktrace = Stacktrace([stack], stack) self._VerifyTwoStacktracesEqual(stacktrace, expected_stacktrace)
def testReturnNoneForEmptyString(self): parser = ClusterfuzzParser() deps = {'src/': Dependency('src/', 'https://repo', '1')} self.assertIsNone( parser.Parse('', deps, 'asan_job', SanitizerType.ADDRESS_SANITIZER))
def testChromeCrashParserParseLineMalformatedCallstack(self): parser = ClusterfuzzParser() deps = {'src': Dependency('src', 'https://repo', '1')} stacktrace_string = textwrap.dedent(""" Blabla... ==1==ERROR: AddressSanitizer: stack-overflow on address 0x7ffec59ebec0 #0 dummy #1 dummy #2 dummy """) self.assertIsNone( parser.Parse(stacktrace_string, deps, 'asan_job', 'abrt'))
def stacktrace(self): """Parses stacktrace and returns parsed ``Stacktrace`` object.""" stacktrace = ClusterfuzzParser().Parse( self._raw_stacktrace, self.dependencies, self.job_type, self.crash_type, signature=self.signature, top_n_frames=self._top_n_frames, crash_address=self.crash_address, root_path=self.regression_repository['dep_path'], root_repo_url=self.regression_repository['repo_url']) if not stacktrace: logging.warning('Failed to parse the stacktrace %s', self._raw_stacktrace) return stacktrace
def stacktrace(self): """Parses stacktrace and returns parsed ``Stacktrace`` object.""" if self._stacktrace or self._stacktrace_parsed: return self._stacktrace self._stacktrace = ClusterfuzzParser().Parse( self._stacktrace_str, self.dependencies, self.job_type, self.sanitizer, signature=self.signature, top_n_frames=self._top_n_frames, crashed_address=self.crashed_address) if not self._stacktrace: logging.warning('Failed to parse the stacktrace %s', self._stacktrace_str) # Only parse stacktrace string once. self._stacktrace_parsed = True return self._stacktrace
def testReturnNoneForDummyJobType(self): parser = ClusterfuzzParser() deps = {'src': Dependency('src', 'https://repo', '1')} self.assertIsNone( parser.Parse('Crash stack:', deps, 'dummy_job', 'abrt'))
def testReturnNoneForEmptyString(self): parser = ClusterfuzzParser() deps = {'src': Dependency('src', 'https://repo', '1')} self.assertIsNone(parser.Parse('', deps, 'asan_job', 'abrt'))