From: Jim Ingham Date: Wed, 30 Sep 2020 18:46:59 +0000 (-0700) Subject: Fix crash in SBStructuredData::GetDescription() when there's no StructuredDataPlugin. X-Git-Tag: llvmorg-13-init~10477 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=afaeb6af79a4278249ef9114755e5685d0b35984;p=platform%2Fupstream%2Fllvm.git Fix crash in SBStructuredData::GetDescription() when there's no StructuredDataPlugin. Also, use the StructuredData::Dump method to print the StructuredData if there is no plugin, rather than just returning an error. Differential Revision: https://reviews.llvm.org/D88266 --- diff --git a/lldb/include/lldb/Core/StructuredDataImpl.h b/lldb/include/lldb/Core/StructuredDataImpl.h index 9aea645..929ce21 100644 --- a/lldb/include/lldb/Core/StructuredDataImpl.h +++ b/lldb/include/lldb/Core/StructuredDataImpl.h @@ -68,14 +68,18 @@ public: return error; } - // Grab the plugin. - auto plugin_sp = lldb::StructuredDataPluginSP(m_plugin_wp); + // Grab the plugin + lldb::StructuredDataPluginSP plugin_sp = m_plugin_wp.lock(); + + // If there's no plugin, call underlying data's dump method: if (!plugin_sp) { - error.SetErrorString("Cannot pretty print structured data: " - "plugin doesn't exist."); + if (!m_data_sp) { + error.SetErrorString("No data to describe."); + return error; + } + m_data_sp->Dump(stream, true); return error; } - // Get the data's description. return plugin_sp->GetDescription(m_data_sp, stream); } diff --git a/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py b/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py index f5efdfa..a1a3185 100644 --- a/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py +++ b/lldb/test/API/python_api/sbstructureddata/TestStructuredDataAPI.py @@ -35,6 +35,13 @@ class TestStructuredDataAPI(TestBase): # Tests for invalid data type self.invalid_struct_test(example) + # Test that GetDescription works: + s.Clear() + error = example.GetDescription(s) + self.assertTrue(error.Success(), "GetDescription works") + if not "key_float" in s.GetData(): + self.fail("FAILED: could not find key_float in description output") + dict_struct = lldb.SBStructuredData() dict_struct = example.GetValueForKey("key_dict")