aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/debugger
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-07-05 15:53:23 +0200
committerhjk <hjk@qt.io>2019-07-23 06:27:49 +0000
commit2abdc541476eb6402fce8c12ff7de609e8c6653a (patch)
tree06a3f33a8e41c6d6be0a090b79968435856c08b0 /share/qtcreator/debugger
parentea6592e9b4074fe168d861a6573c127cd49b5b29 (diff)
Debugger: Avoid infinite loop in dumper
Change-Id: I71e89574a9eecc079b4d8e91da352fd2b7b0d9ab Done-by: Xander (@bugreports.qt.io) Task-number: QTCREATORBUG-22637 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'share/qtcreator/debugger')
-rw-r--r--share/qtcreator/debugger/dumper.py28
1 files changed, 22 insertions, 6 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index 586df832c0..341ceb7145 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -1230,12 +1230,28 @@ class DumperBase:
ns = self.qtNamespace()
if len(ns) > 0 and typeName.startswith(ns):
typeName = typeName[len(ns):]
- pos = typeName.find('<')
- # FIXME: make it recognize foo<A>::bar<B>::iterator?
- while pos != -1:
- pos1 = typeName.rfind('>', pos)
- typeName = typeName[0:pos] + typeName[pos1+1:]
- pos = typeName.find('<')
+ # warn( 'stripping %s' % typeName )
+ lvl = 0
+ pos = None
+ stripChunks = []
+ sz = len(typeName)
+ for index in range(0, sz):
+ s = typeName[index]
+ if s == '<':
+ lvl += 1
+ if lvl == 1:
+ pos = index
+ continue
+ elif s == '>':
+ lvl -= 1
+ if lvl < 0 :
+ error("Unbalanced '<' in type, @index %d" % index)
+ if lvl == 0:
+ stripChunks.append((pos, index+1))
+ if lvl != 0:
+ error("unbalanced at end of type name")
+ for (f, l) in reversed(stripChunks):
+ typeName = typeName[:f] + typeName[l:]
return typeName
def tryPutPrettyItem(self, typeName, value):