# HG changeset patch # User Yuya Nishihara # Date 1540034756 -32400 # Node ID cc4586749c8c99885619eaaa17e3157176c4523c # Parent fc4c598dd4a0443977aff8c1b5d77c6377bd30cc statprof: fix overflow while skipping boilerplate parts I got IndexError randomly because of stack[i] where i = len(stack). diff -r fc4c598dd4a0 -r cc4586749c8c mercurial/statprof.py --- 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)