Exemple #1
0
    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)
Exemple #2
0
    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'))
Exemple #4
0
    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
Exemple #5
0
    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'))