1 #include <gtest/gtest.h>
2 #include <stdio.h>
3 #include <string.h>
4
5 constexpr int BUF_SIZE = 100;
6 constexpr int EXPECT_NUM = 3;
7 constexpr int NUM = 666;
8 using namespace testing::ext;
9
10 class FortifyVsnprintfchkTest : public testing::Test {
SetUp()11 void SetUp() override {}
TearDown()12 void TearDown() override {}
13 };
14
15 extern "C" int __vsnprintf_chk(
16 char* dest, size_t supplied_size, int flags, size_t dst_len_from_compiler, const char* format, va_list va);
17
VsnprintfHelper(char * str,size_t size,const char * format,...)18 static int VsnprintfHelper(char* str, size_t size, const char* format, ...)
19 {
20 va_list args;
21 va_start(args, format);
22 int result = __vsnprintf_chk(str, size - 1, 0, size - 1, format, args);
23 va_end(args);
24 return result;
25 }
26
27 /**
28 * @tc.name: __vsnprintf_chk_001
29 * @tc.desc: Verify whether the specified content will be copied after the output of this function.
30 * @tc.type: FUNC
31 * */
32 HWTEST_F(FortifyVsnprintfchkTest, __vsnprintf_chk_001, TestSize.Level1)
33 {
34 char buffer[BUF_SIZE];
35 const char* format = "%d";
36 int value = NUM;
37 int result = VsnprintfHelper(buffer, sizeof(buffer), format, value);
38 EXPECT_EQ(EXPECT_NUM, result);
39 EXPECT_STREQ("666", buffer);
40 }