From da6b908c4fe63d8c6192c78f00d43ddb40cc563e Mon Sep 17 00:00:00 2001 From: Finkman Date: Sat, 14 Jan 2023 16:07:49 +0100 Subject: [PATCH] PrettyPrinter: Check if match is valid before accessing group (#3920) --- tools/gdb_pretty_printer/nlohmann-json.py | 28 +++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/gdb_pretty_printer/nlohmann-json.py b/tools/gdb_pretty_printer/nlohmann-json.py index 0099f9c0a..299152aed 100644 --- a/tools/gdb_pretty_printer/nlohmann-json.py +++ b/tools/gdb_pretty_printer/nlohmann-json.py @@ -14,19 +14,19 @@ class JsonValuePrinter: return self.val def json_lookup_function(val): - m = ns_pattern.fullmatch(val.type.strip_typedefs().name) - name = m.group('name') - if name and name.startswith('basic_json<') and name.endswith('>'): - m = ns_pattern.fullmatch(str(val['m_type'])) - t = m.group('name') - if t and t.startswith('detail::value_t::'): - try: - union_val = val['m_value'][t.removeprefix('detail::value_t::')] - if union_val.type.code == gdb.TYPE_CODE_PTR: - return gdb.default_visualizer(union_val.dereference()) - else: - return JsonValuePrinter(union_val) - except Exception: - return JsonValuePrinter(val['m_type']) + if m := ns_pattern.fullmatch(str(val.type.strip_typedefs().name)): + name = m.group('name') + if name and name.startswith('basic_json<') and name.endswith('>'): + m = ns_pattern.fullmatch(str(val['m_type'])) + t = m.group('name') + if t and t.startswith('detail::value_t::'): + try: + union_val = val['m_value'][t.removeprefix('detail::value_t::')] + if union_val.type.code == gdb.TYPE_CODE_PTR: + return gdb.default_visualizer(union_val.dereference()) + else: + return JsonValuePrinter(union_val) + except Exception: + return JsonValuePrinter(val['m_type']) gdb.pretty_printers.append(json_lookup_function)