statprof: fix overflow while skipping boilerplate parts
I got IndexError randomly because of stack[i] where i = len(stack).
--- a/mercurial/statprof.py Sat Oct 20 20:15:48 2018 +0900
+++ b/mercurial/statprof.py Sat Oct 20 20:25:56 2018 +0900
@@ -257,6 +257,9 @@
def filename(self):
return os.path.basename(self.path)
+ def skipname(self):
+ return r'%s:%s' % (self.filename(), self.function)
+
class Sample(object):
__slots__ = (u'stack', u'time')
@@ -661,10 +664,8 @@
if len(stack) > 1:
i = 1
# Skip boiler plate parts of the stack
- name = r'%s:%s' % (stack[i].filename(), stack[i].function)
- while i < len(stack) and name in skips:
+ while i < len(stack) and stack[i].skipname() in skips:
i += 1
- name = r'%s:%s' % (stack[i].filename(), stack[i].function)
if i < len(stack):
child.add(stack[i:], time)