From cefa730d3542867912f9b63cc63cbe6d4690ccd5 Mon Sep 17 00:00:00 2001 From: dreamcmi <1912544842@qq.com> Date: Fri, 12 May 2023 00:24:40 +0800 Subject: [PATCH] Fixed a bug where help("modules") crashed when no lib was loaded --- src/PikaObj.c | 4 ++++ test/pikaMain-test.cpp | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/PikaObj.c b/src/PikaObj.c index eb5dcf4ae..3482a24d2 100644 --- a/src/PikaObj.c +++ b/src/PikaObj.c @@ -2427,6 +2427,10 @@ PikaObj* obj_linkLibrary(PikaObj* self, uint8_t* library_bytes) { void obj_printModules(PikaObj* self) { LibObj* lib = obj_getObj(self, "@lib"); + if (lib == NULL) { + pika_platform_printf("Error: Not found LibObj, please execute obj_linkLibrary()\r\n"); + return; + } pika_platform_printf(arg_getStr((Arg*)g_PikaObjState.helpModulesCmodule)); LibObj_printModules(lib); } diff --git a/test/pikaMain-test.cpp b/test/pikaMain-test.cpp index 2cd6865b6..abd5d4316 100644 --- a/test/pikaMain-test.cpp +++ b/test/pikaMain-test.cpp @@ -3054,4 +3054,20 @@ TEST(pikaMain, _obj_set_str_null) { EXPECT_EQ(pikaMemNow(), 0); } +TEST(pikaMain, shell_nolib_print_help) { + char lines[] = {"help(\"modules\")\n"}; + /* init */ + g_PikaMemInfo.heapUsedMax = 0; + PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain); + /* run */ + for (size_t i = 0; i < strGetSize(lines); i++) { + obj_runChar(pikaMain, lines[i]); + } + /* assert */ + EXPECT_STREQ(log_buff[1], "Error: Not found LibObj, please execute obj_linkLibrary()\r\n"); + /* deinit */ + obj_deinit(pikaMain); + EXPECT_EQ(pikaMemNow(), 0); +} + TEST_END \ No newline at end of file