From 6ae71652a503e64e129172f0c799d26ca7b10569 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 11 Jan 2021 12:12:00 +0100 Subject: [PATCH] Dumper: robustify msvc std vector/string dumpers By looking for debug members instead of relying on a failing size check. Task-number: QTCREATORBUG-24901 Change-Id: Ia79ba893243e864c7808e89ee7e29ba4b853f754 Reviewed-by: Christian Stenger --- share/qtcreator/debugger/stdtypes.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index 41bdc4ec76f..a3cc6f2c978 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -744,12 +744,12 @@ def qdumpHelper__std__string__QNX(d, value, charType, format): def qdumpHelper__std__string__MSVC(d, value, charType, format): try: + _ = value["_Mypair"]["_Myval2"]["_Myproxy"] (proxy, buffer, size, alloc) = value.split("p16spp") - d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) - except RuntimeError: + except Exception: proxy = None (buffer, size, alloc) = value.split("16spp") - d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) + d.check(0 <= size and size <= alloc and alloc <= 100 * 1000 * 1000) _BUF_SIZE = int(16 / charType.size()) if _BUF_SIZE <= alloc: if proxy is None: @@ -1128,21 +1128,21 @@ def qdumpHelper__std__vector__libcxx(d, value): def qdumpHelper__std__vector__msvc(d, value): inner_type = value.type[0] if inner_type.name == "bool": - proxy1, proxy2, start, finish, alloc, size = value.split("pppppi") try: - d.check(0 <= size and size <= 1000 * 1000 * 1000) - d.check(finish <= alloc) + _ = value["_Myproxy"] + proxy1, proxy2, start, finish, alloc, size = value.split("pppppi") except RuntimeError: start, finish, alloc, size = value.split("pppi") + d.check(0 <= size and size <= 1000 * 1000 * 1000) qdumpHelper__std__vector__bool(d, start, size, inner_type) else: - proxy, start, finish, alloc = value.split("pppp") - size = (finish - start) // inner_type.size() try: - d.check(0 <= size and size <= 1000 * 1000 * 1000) - d.check(finish <= alloc) + _ = value["_Mypair"]["_Myval2"]["_Myproxy"] + proxy, start, finish, alloc = value.split("pppp") except RuntimeError: start, finish, alloc = value.split("ppp") + size = (finish - start) // inner_type.size() + d.check(0 <= size and size <= 1000 * 1000 * 1000) qdumpHelper__std__vector__nonbool(d, start, finish, alloc, inner_type)