From dd4ccfab79b1fbf64279f0f6e9319dcc319f4fc6 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 20 May 2019 08:45:42 +0800 Subject: [PATCH] Cover shared ptr message. --- trunk/src/kernel/srs_kernel_error.hpp | 1 + trunk/src/kernel/srs_kernel_flv.cpp | 10 +++---- trunk/src/utest/srs_utest_kernel.cpp | 42 +++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/trunk/src/kernel/srs_kernel_error.hpp b/trunk/src/kernel/srs_kernel_error.hpp index 3427dc4a0..45a7751c7 100644 --- a/trunk/src/kernel/srs_kernel_error.hpp +++ b/trunk/src/kernel/srs_kernel_error.hpp @@ -175,6 +175,7 @@ #define ERROR_OpenSslCreateHMAC 2050 #define ERROR_RTMP_STREAM_NAME_EMPTY 2051 #define ERROR_HTTP_HIJACK 2052 +#define ERROR_RTMP_MESSAGE_CREATE 2053 // // The system control message, // It's not an error, but special control logic. diff --git a/trunk/src/kernel/srs_kernel_flv.cpp b/trunk/src/kernel/srs_kernel_flv.cpp index 2feb3fdf7..59ca14806 100644 --- a/trunk/src/kernel/srs_kernel_flv.cpp +++ b/trunk/src/kernel/srs_kernel_flv.cpp @@ -250,12 +250,12 @@ srs_error_t SrsSharedPtrMessage::create(SrsCommonMessage* msg) srs_error_t SrsSharedPtrMessage::create(SrsMessageHeader* pheader, char* payload, int size) { srs_error_t err = srs_success; - - if (ptr) { - srs_assert(false); - return srs_error_new(ERROR_SYSTEM_ASSERT_FAILED, "should not set the payload twice"); + + if (size < 0) { + return srs_error_new(ERROR_RTMP_MESSAGE_CREATE, "create message size=%d", size); } - + + srs_assert(!ptr); ptr = new SrsSharedPtrPayload(); // direct attach the data. diff --git a/trunk/src/utest/srs_utest_kernel.cpp b/trunk/src/utest/srs_utest_kernel.cpp index f3d580861..537231583 100644 --- a/trunk/src/utest/srs_utest_kernel.cpp +++ b/trunk/src/utest/srs_utest_kernel.cpp @@ -3467,6 +3467,48 @@ VOID TEST(KernelFLVTest, CoverAll) #endif } +VOID TEST(KernelFLVTest, CoverSharedPtrMessage) +{ + srs_error_t err; + + if (true) { + SrsMessageHeader h; + SrsSharedPtrMessage m; + HELPER_EXPECT_SUCCESS(m.create(&h, new char[1], 1)); + } + + if (true) { + SrsMessageHeader h; + SrsSharedPtrMessage m; + HELPER_EXPECT_SUCCESS(m.create(&h, NULL, 0)); + } + + if (true) { + SrsMessageHeader h; + SrsSharedPtrMessage m; + HELPER_EXPECT_FAILED(m.create(&h, NULL, -1)); + } + + if (true) { + SrsCommonMessage cm; + cm.size = -1; + + SrsSharedPtrMessage m; + HELPER_EXPECT_FAILED(m.create(&cm)); + } + + if (true) { + SrsMessageHeader h; + h.perfer_cid = 1; + + SrsSharedPtrMessage m; + HELPER_EXPECT_SUCCESS(m.create(&h, NULL, 0)); + + EXPECT_FALSE(m.check(1)); + EXPECT_TRUE(m.check(1)); + } +} + VOID TEST(KernelLogTest, CoverAll) { if (true) {