Ack-by: Liming Gao <liming....@intel.com> > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Michael D > Kinney > Sent: Thursday, May 21, 2020 4:10 AM > To: devel@edk2.groups.io > Cc: Andrew Fish <af...@apple.com>; Ard Biesheuvel > <ard.biesheu...@linaro.org>; Bret Barkelew <bret.barke...@microsoft.com>; > Brian J . Johnson <brian.john...@hpe.com>; Chiu, Chasel > <chasel.c...@intel.com>; Justen, Jordan L <jordan.l.jus...@intel.com>; > Laszlo Ersek <ler...@redhat.com>; Leif Lindholm <l...@nuviainc.com>; Gao, > Liming <liming....@intel.com>; Marvin H?user > <mhaeu...@outlook.de>; Zimmer, Vincent <vincent.zim...@intel.com>; Gao, > Zhichao <zhichao....@intel.com>; Yao, Jiewen > <jiewen....@intel.com>; Vitaly Cheptsov <vit9...@protonmail.com>; Philippe > Mathieu-Daude <phi...@redhat.com> > Subject: [edk2-devel] [Patch v9 2/2] MdePkg/Test/BaseLib: Add > SAFE_STRING_CONSTRAINT_CHECK unit test > > Use the safe string function StrCpyS() in BaseLib to test the > SAFE_STRING_CONSTRAINT_CHECK() macro. > > Cc: Andrew Fish <af...@apple.com> > Cc: Ard Biesheuvel <ard.biesheu...@linaro.org> > Cc: Bret Barkelew <bret.barke...@microsoft.com> > Cc: Brian J. Johnson <brian.john...@hpe.com> > Cc: Chasel Chiu <chasel.c...@intel.com> > Cc: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Cc: Leif Lindholm <l...@nuviainc.com> > Cc: Liming Gao <liming....@intel.com> > Cc: Marvin H?user <mhaeu...@outlook.de> > Cc: Michael D Kinney <michael.d.kin...@intel.com> > Cc: Vincent Zimmer <vincent.zim...@intel.com> > Cc: Zhichao Gao <zhichao....@intel.com> > Cc: Jiewen Yao <jiewen....@intel.com> > Cc: Vitaly Cheptsov <vit9...@protonmail.com> > Signed-off-by: Michael D Kinney <michael.d.kin...@intel.com> > Reviewed-by: Philippe Mathieu-Daude <phi...@redhat.com> > --- > .../UnitTest/Library/BaseLib/Base64UnitTest.c | 107 ++++++++++++++++++ > 1 file changed, 107 insertions(+) > > diff --git a/MdePkg/Test/UnitTest/Library/BaseLib/Base64UnitTest.c > b/MdePkg/Test/UnitTest/Library/BaseLib/Base64UnitTest.c > index 8952f9da6c..2c4266491c 100644 > --- a/MdePkg/Test/UnitTest/Library/BaseLib/Base64UnitTest.c > +++ b/MdePkg/Test/UnitTest/Library/BaseLib/Base64UnitTest.c > @@ -290,6 +290,99 @@ RfcDecodeTest( > return UNIT_TEST_PASSED; > } > > +#define SOURCE_STRING L"Hello" > + > +STATIC > +UNIT_TEST_STATUS > +EFIAPI > +SafeStringContraintCheckTest ( > + IN UNIT_TEST_CONTEXT Context > + ) > +{ > + RETURN_STATUS Status; > + CHAR16 Destination[20]; > + CHAR16 AllZero[20]; > + > + // > + // Zero buffer used to verify Destination is not modified > + // > + ZeroMem (AllZero, sizeof (AllZero)); > + > + // > + // Positive test case copy source unicode string to destination > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (Destination, sizeof (Destination) / sizeof (CHAR16), > SOURCE_STRING); > + UT_ASSERT_NOT_EFI_ERROR (Status); > + UT_ASSERT_MEM_EQUAL (Destination, SOURCE_STRING, sizeof (SOURCE_STRING)); > + > + // > + // Positive test case with DestMax the same as Source size > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (Destination, sizeof (SOURCE_STRING) / sizeof (CHAR16), > SOURCE_STRING); > + UT_ASSERT_NOT_EFI_ERROR (Status); > + UT_ASSERT_MEM_EQUAL (Destination, SOURCE_STRING, sizeof (SOURCE_STRING)); > + > + // > + // Negative test case with Destination NULL > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (NULL, sizeof (Destination) / sizeof (CHAR16), > SOURCE_STRING); > + UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER); > + UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero)); > + > + // > + // Negative test case with Source NULL > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (Destination, sizeof (Destination) / sizeof (CHAR16), > NULL); > + UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER); > + UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero)); > + > + // > + // Negative test case with DestMax too big > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (Destination, MAX_UINTN, SOURCE_STRING); > + UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER); > + UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero)); > + > + // > + // Negative test case with DestMax 0 > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (Destination, 0, SOURCE_STRING); > + UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER); > + UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero)); > + > + // > + // Negative test case with DestMax smaller than Source size > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (Destination, 1, SOURCE_STRING); > + UT_ASSERT_STATUS_EQUAL (Status, RETURN_BUFFER_TOO_SMALL); > + UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero)); > + > + // > + // Negative test case with DestMax smaller than Source size by one > character > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (Destination, sizeof (SOURCE_STRING) / sizeof (CHAR16) - > 1, SOURCE_STRING); > + UT_ASSERT_STATUS_EQUAL (Status, RETURN_BUFFER_TOO_SMALL); > + UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero)); > + > + // > + // Negative test case with overlapping Destination and Source > + // > + ZeroMem (Destination, sizeof (Destination)); > + Status = StrCpyS (Destination, sizeof (Destination) / sizeof (CHAR16), > Destination); > + UT_ASSERT_STATUS_EQUAL (Status, RETURN_ACCESS_DENIED); > + UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero)); > + > + return UNIT_TEST_PASSED; > +} > + > /** > Initialze the unit test framework, suite, and unit tests for the > Base64 conversion APIs of BaseLib and run the unit tests. > @@ -309,6 +402,7 @@ UnitTestingEntry ( > UNIT_TEST_FRAMEWORK_HANDLE Fw; > UNIT_TEST_SUITE_HANDLE b64EncodeTests; > UNIT_TEST_SUITE_HANDLE b64DecodeTests; > + UNIT_TEST_SUITE_HANDLE SafeStringTests; > > Fw = NULL; > > @@ -367,6 +461,19 @@ UnitTestingEntry ( > AddTestCase (b64DecodeTests, "Incorrectly placed padding character", > "Error4", RfcDecodeTest, NULL, CleanUpB64TestContext, > &mBasicDecodeError4); > AddTestCase (b64DecodeTests, "Too small of output buffer", "Error5", > RfcDecodeTest, NULL, CleanUpB64TestContext, > &mBasicDecodeError5); > > + // > + // Populate the safe string Unit Test Suite. > + // > + Status = CreateUnitTestSuite (&SafeStringTests, Fw, "Safe String", > "BaseLib.SafeString", NULL, NULL); > + if (EFI_ERROR (Status)) { > + DEBUG ((DEBUG_ERROR, "Failed in CreateUnitTestSuite for > SafeStringTests\n")); > + Status = EFI_OUT_OF_RESOURCES; > + goto EXIT; > + } > + > + // --------------Suite-----------Description--------------Class > Name----------Function--------Pre---Post-------------------Context----------- > + AddTestCase (SafeStringTests, "SAFE_STRING_CONSTRAINT_CHECK", > "SafeStringContraintCheckTest", SafeStringContraintCheckTest, > NULL, NULL, NULL); > + > // > // Execute the tests. > // > -- > 2.21.0.windows.1 > > >
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#60030): https://edk2.groups.io/g/devel/message/60030 Mute This Topic: https://groups.io/mt/74359142/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-