def test_no_linkify(self): """Ensure that we don't linkify a non-stack frame line.""" revisions_dict = { '/src': { 'url': 'https://chromium.googlesource.com/chromium/src.git', 'rev': '1d783bc2a3629b94c963debfa3feaee27092dd92', }, 'src/v8': { 'url': 'https://chromium.googlesource.com/v8/v8.git', 'rev': '7fb2c3b6db3f889ea95851ca11dcb731b07a7925', } } stack = '\n'.join([ ('../../net/spdy/chromium/spdy_stream.cc:227:21: runtime error: ' 'signed integer overflow:159714659 + 1996488831 cannot be represented ' 'in type \'int\''), 'random' ]) expected = '\n'.join([ ('../../net/spdy/chromium/spdy_stream.cc:227:21: runtime error: ' 'signed integer overflow:159714659 + 1996488831 cannot be represented ' 'in type 'int''), 'random' ]) self.assertEqual( show.filter_stacktrace(stack, 'type', revisions_dict, '', ''), expected)
def test_asan_oss_fuzz(self): """Ensure it linkifies asan trace for oss-fuzz.""" revisions_dict = { '/src/libass': { 'url': 'https://github.com/libass/libass.git', 'rev': '35dc4dd0e14e3afb4a2c7e319a3f4110e20c7cf2', 'type': 'git' }, '/src/fribidi': { 'url': 'https://github.com/behdad/fribidi.git', 'rev': '881b8d891cc61989ab8811b74d0e721f72bf913b', 'type': 'git' } } stack = '\n'.join( [r'#1 0xa6760 in Test /src/fribidi/lib/common.h:3', r'random']) expected = ( '#1 0xa6760 in Test <a href="' 'https://github.com/behdad/fribidi/blob/' '881b8d891cc61989ab8811b74d0e721f72bf913b/lib/common.h#L3">' 'fribidi/lib/common.h:3' '</a>\n' 'random') self.assertEqual( show.filter_stacktrace(stack, 'type', '', revisions_dict), expected)
def test_linkify_if_needed(self): """Ensure that we don't escape prelinked kernel links.""" stack = ('[<ffffff90082bf4bc>] SyS_fchownat+0xdc/0x168 http://go/pakernel/' 'msm-google/+/40e9b2ff3a280a8775cfcd5841e530ce78f94355/fs/open.c' '#622;msm-google/fs/open.c;') expected_stack = ('[<ffffff90082bf4bc>] SyS_fchownat+0xdc/0x168 ' '<a href="http://go/pakernel/' 'msm-google/+/' '40e9b2ff3a280a8775cfcd5841e530ce78f94355/fs/open.c#622">' 'msm-google/fs/open.c</a>') self.assertEqual( show.filter_stacktrace(stack, 'type', {}, 'android', ''), expected_stack)
def test_asan_v8(self): """Ensure it linkifies v8 win trace for chromium.""" revisions_dict = { '/src': { 'url': 'https://chromium.googlesource.com/v8/v8.git', 'rev': '7fb2c3b6db3f889ea95851ca11dcb731b07a7925', } } stack = '\n'.join([(r'v8::internal::RootVisitor::VisitRootPointer ' r'[0x011517C5+53] (C:\b\c\b\win_asan_release\src\v8' r'\src\visitors.h:69)'), r'random']) expected = ('v8::internal::RootVisitor::VisitRootPointer [0x011517C5+53] ' '(<a href="https://chromium.googlesource.com/v8/v8/+/' '7fb2c3b6db3f889ea95851ca11dcb731b07a7925/v8/src/visitors.h#69"' '>v8/src/visitors.h:69</a>)\n' 'random') self.assertEqual( show.filter_stacktrace(stack, 'type', revisions_dict, '', ''), expected)
def test_asan_chromium(self): """Ensure it linkifies asan trace for chromium.""" revisions_dict = { '/src': { 'url': 'https://chromium.googlesource.com/chromium/src.git', 'rev': '1d783bc2a3629b94c963debfa3feaee27092dd92', }, 'src/v8': { 'url': 'https://chromium.googlesource.com/v8/v8.git', 'rev': '7fb2c3b6db3f889ea95851ca11dcb731b07a7925', } } stack = '\n'.join( [r'#1 0xa6760 in Test /build/src/v8/src/api.cc:3', r'random']) expected = ('#1 0xa6760 in Test <a href="' 'https://chromium.googlesource.com/v8/v8/+/' '7fb2c3b6db3f889ea95851ca11dcb731b07a7925/src/api.cc#3">' 'v8/src/api.cc:3' '</a>\n' 'random') self.assertEqual( show.filter_stacktrace(stack, 'type', revisions_dict, '', ''), expected)
def test_xss(self): """Ensure that we escape untrusted stacktrace.""" stack = 'aaaa\n<script>alert("XSS")</script>\ncccc' expected = 'aaaa\n<script>alert("XSS")</script>\ncccc' self.assertEqual(show.filter_stacktrace(stack, 'type', '', {}), expected)
def test_clean(self): """Ensure it cleans trace with stack_clean_regex.""" stack = 'aaaa\nbbbb\ncccc\naaaa\nbbbb\ncccc' expected = 'aaaa\ncccc\naaaa\ncccc' self.assertEqual(show.filter_stacktrace(stack, 'type', 'bb', {}), expected)