From 4a4db5ea6eed4399fe8e9707d8066449e88e4860 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 28 Dec 2023 00:55:05 +0100 Subject: [PATCH] [consider merging] Avoids a segfault This happens when an expression returns a class object and that is converted to a string. --- src/tl/tl/tlVariant.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/tl/tl/tlVariant.cc b/src/tl/tl/tlVariant.cc index 2360b9ee7..b25a6bbf8 100644 --- a/src/tl/tl/tlVariant.cc +++ b/src/tl/tl/tlVariant.cc @@ -1815,9 +1815,21 @@ Variant::to_string () const } else if (m_type == t_id) { r = "[id" + tl::to_string (m_var.m_id) + "]"; } else if (m_type == t_user) { - r = m_var.mp_user.cls->to_string (m_var.mp_user.object); + void *obj = m_var.mp_user.object; + if (obj) { + r = m_var.mp_user.cls->to_string (obj); + } else { + r = "[class "; + r += m_var.mp_user.cls->name (); + r += "]"; + } } else if (m_type == t_user_ref) { - r = m_var.mp_user_ref.cls->to_string (m_var.mp_user_ref.cls->deref_proxy_const (reinterpret_cast (m_var.mp_user_ref.ptr)->get ())); + const void *obj = m_var.mp_user_ref.cls->deref_proxy_const (reinterpret_cast (m_var.mp_user_ref.ptr)->get ()); + if (obj) { + r = m_var.mp_user_ref.cls->to_string (obj); + } else { + r = "[null]"; + } } else { r = "[unknown]"; }