From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-40134.protonmail.ch (mail-40134.protonmail.ch [185.70.40.134]) by mx.groups.io with SMTP id smtpd.web10.39.1590035149704923024 for ; Wed, 20 May 2020 21:25:50 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@protonmail.com header.s=protonmail header.b=lCJYnBzZ; spf=pass (domain: protonmail.com, ip: 185.70.40.134, mailfrom: vit9696@protonmail.com) Date: Thu, 21 May 2020 04:25:36 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1590035146; bh=AIwp1k1aCk1o3HbstdJ3igx6tjVWmrehsl+1fVNBAYI=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=lCJYnBzZHK15FVaSwkuiYCHU0JYXXM6xFFOtly/Gd4y7iQPwyd5perYMCoLaQXVh7 xqdku6if5p6JdEIUWJDY6nlHKa5fzSwlLmZrKdf8MXWrBH2xjlHoBFKNk4wgMb8ZVE Tb2lvp1VKZ0iM37D7QLbMSsIPrMwYWQIoy5vboe0= To: Michael D Kinney , devel@edk2.groups.io From: "Vitaly Cheptsov" Cc: Andrew Fish , Ard Biesheuvel , Bret Barkelew , "Brian J . Johnson" , Chasel Chiu , Jordan Justen , Laszlo Ersek , Leif Lindholm , Liming Gao , Marvin H?user , Vincent Zimmer , Zhichao Gao , Jiewen Yao , Philippe Mathieu-Daude Reply-To: vit9696 Subject: Re: [Patch v9 2/2] MdePkg/Test/BaseLib: Add SAFE_STRING_CONSTRAINT_CHECK unit test Message-ID: In-Reply-To: <20200520201022.28196-3-michael.d.kinney@intel.com> References: <20200520201022.28196-1-michael.d.kinney@intel.com> <20200520201022.28196-3-michael.d.kinney@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=0.0 required=7.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,FREEMAIL_REPLYTO_END_DIGIT,HTML_MESSAGE, HTML_MIME_NO_HTML_TAG,MIME_HTML_ONLY shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mail.protonmail.ch X-Groupsio-MsgNum: 60011 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg=pgp-sha256; boundary="---------------------93356beee968c5af6f68728a7c0eac44"; charset=UTF-8 -----------------------93356beee968c5af6f68728a7c0eac44 Content-Type: multipart/mixed; boundary="dae12a5f9e0b7dbb18046aa610f4053801058a94" --dae12a5f9e0b7dbb18046aa610f4053801058a94 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable Content-Language: en-US
Time to= get this land, thx Mike!

Reviewed-By: Vitaly Chepts= ov <vit9696@protonmail.c= om>

On Wed, May 20, 2020 at= 23:10, Michael D Kinney <michael.d.kinney@intel.com> wrote:
Use the safe string function StrCpyS() in B= aseLib to test the
SAFE_STRING_CONSTRAINT_CHECK() macro.

Cc: Andr= ew Fish <afish@apple.com>
Cc: Ard Biesheuvel <ard.biesheuvel@li= naro.org>
Cc: Bret Barkelew <bret.barkelew@microsoft.com>
Cc= : Brian J. Johnson <brian.johnson@hpe.com>
Cc: Chasel Chiu <cha= sel.chiu@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com&g= t;
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Leif Lindholm <l= eif@nuviainc.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: = Marvin H?user <mhaeuser@outlook.de>
Cc: Michael D Kinney <micha= el.d.kinney@intel.com>
Cc: Vincent Zimmer <vincent.zimmer@intel.co= m>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Cc: Jiewen Yao &l= t;jiewen.yao@intel.com>
Cc: Vitaly Cheptsov <vit9696@protonmail.co= m>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>=
Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com>
--- .../UnitTest/Library/BaseLib/Base64UnitTest.c | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+)

diff --git a/MdePkg/Test/UnitTes= t/Library/BaseLib/Base64UnitTest.c b/MdePkg/Test/UnitTest/Library/BaseLib/B= ase64UnitTest.c
index 8952f9da6c..2c4266491c 100644
--- a/MdePkg/Test= /UnitTest/Library/BaseLib/Base64UnitTest.c
+++ b/MdePkg/Test/UnitTest/Li= brary/BaseLib/Base64UnitTest.c
@@ -290,6 +290,99 @@ RfcDecodeTest(
= return UNIT_TEST_PASSED;
}

+#define SOURCE_STRING L"Hello"
= +
+STATIC
+UNIT_TEST_STATUS
+EFIAPI
+SafeStringContraintCheckTe= st (
+ 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));
+
+ //<= br>+ // Positive test case copy source unicode string to destination
+ = //
+ ZeroMem (Destination, sizeof (Destination));
+ Status =3D Str= CpyS (Destination, sizeof (Destination) / sizeof (CHAR16), SOURCE_STRING);<= br>+ UT_ASSERT_NOT_EFI_ERROR (Status);
+ UT_ASSERT_MEM_EQUAL (Destinat= ion, SOURCE_STRING, sizeof (SOURCE_STRING));
+
+ //
+ // Positiv= e test case with DestMax the same as Source size
+ //
+ ZeroMem (De= stination, sizeof (Destination));
+ Status =3D StrCpyS (Destination, si= zeof (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 De= stination NULL
+ //
+ ZeroMem (Destination, sizeof (Destination));<= br>+ Status =3D StrCpyS (NULL, sizeof (Destination) / sizeof (CHAR16), SOU= RCE_STRING);
+ UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER= );
+ UT_ASSERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));
+=
+ //
+ // Negative test case with Source NULL
+ //
+ ZeroM= em (Destination, sizeof (Destination));
+ Status =3D StrCpyS (Destinati= on, sizeof (Destination) / sizeof (CHAR16), NULL);
+ UT_ASSERT_STATUS_E= QUAL (Status, RETURN_INVALID_PARAMETER);
+ UT_ASSERT_MEM_EQUAL (Destina= tion, AllZero, sizeof (AllZero));
+
+ //
+ // Negative test case= with DestMax too big
+ //
+ ZeroMem (Destination, sizeof (Destinat= ion));
+ Status =3D StrCpyS (Destination, MAX_UINTN, SOURCE_STRING);+ UT_ASSERT_STATUS_EQUAL (Status, RETURN_INVALID_PARAMETER);
+ UT_ASS= ERT_MEM_EQUAL (Destination, AllZero, sizeof (AllZero));
+
+ //
+ = // Negative test case with DestMax 0
+ //
+ ZeroMem (Destination, = sizeof (Destination));
+ Status =3D StrCpyS (Destination, 0, SOURCE_STR= ING);
+ 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 =3D StrC= pyS (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 s= maller than Source size by one character
+ //
+ ZeroMem (Destinatio= n, sizeof (Destination));
+ Status =3D StrCpyS (Destination, sizeof (SO= URCE_STRING) / sizeof (CHAR16) - 1, SOURCE_STRING);
+ UT_ASSERT_STATUS_= EQUAL (Status, RETURN_BUFFER_TOO_SMALL);
+ UT_ASSERT_MEM_EQUAL (Destina= tion, AllZero, sizeof (AllZero));
+
+ //
+ // Negative test case= with overlapping Destination and Source
+ //
+ ZeroMem (Destinatio= n, sizeof (Destination));
+ Status =3D StrCpyS (Destination, sizeof (De= stination) / sizeof (CHAR16), Destination);
+ UT_ASSERT_STATUS_EQUAL (S= tatus, RETURN_ACCESS_DENIED);
+ UT_ASSERT_MEM_EQUAL (Destination, AllZe= ro, 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;
U= NIT_TEST_SUITE_HANDLE b64EncodeTests;
UNIT_TEST_SUITE_HANDLE = b64DecodeTests;
+ UNIT_TEST_SUITE_HANDLE SafeStringTests;
Fw =3D NULL;

@@ -367,6 +461,19 @@ UnitTestingEntry (
AddTe= stCase (b64DecodeTests, "Incorrectly placed padding character", "Error4", R= fcDecodeTest, NULL, CleanUpB64TestContext, &mBasicDecodeError4);
= AddTestCase (b64DecodeTests, "Too small of output buffer", "Error5", RfcDec= odeTest, NULL, CleanUpB64TestContext, &mBasicDecodeError5);

+ /= /
+ // Populate the safe string Unit Test Suite.
+ //
+ Status = =3D CreateUnitTestSuite (&SafeStringTests, Fw, "Safe String", "BaseLib.= SafeString", NULL, NULL);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((D= EBUG_ERROR, "Failed in CreateUnitTestSuite for SafeStringTests\n"));
+ = Status =3D EFI_OUT_OF_RESOURCES;
+ goto EXIT;
+ }
+
+ //= --------------Suite-----------Description--------------Class Name---------= -Function--------Pre---Post-------------------Context-----------
+ AddT= estCase (SafeStringTests, "SAFE_STRING_CONSTRAINT_CHECK", "SafeStringContra= intCheckTest", SafeStringContraintCheckTest, NULL, NULL, NULL);
+
= //
// Execute the tests.
//
--
2.21.0.windows.1



--dae12a5f9e0b7dbb18046aa610f4053801058a94-- -----------------------93356beee968c5af6f68728a7c0eac44 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: ProtonMail wsBmBAEBCAAQBQJexgK+CRBPsoxt7Hy0xQAKCRBPsoxt7Hy0xa/8B/9NDiqP WvcxkXGRUTm56RxVhxpO5ioPTmwwhlGhN4ETfbwbGvPucRj6iKnZotLmM1cg dQ9U99IoJbR3lW5tklVuh7+MrGFupcN5g1v2LspcFnEYFj4XaTTIMSId+2Hz 7eI0z60jXi7SCHjarR7tVJQx2p3YOuqKc12kPg8UYspIZglndSXa9b/HJqv1 ZkCg79Rn/Ml6SA1/+mJI8Tz0l3KFvDee2lpMPn/+QfK1QtY5OhRQQEvDINFF g01bE65ld10eJDctMcxklbtK5dOJQjmEu+UyE9W/SP27yDN7vJDemjx8VspW gZknWBv9ecnyNXCPSAzzxjd9zFCPxwrkLiDC =iTNx -----END PGP SIGNATURE----- -----------------------93356beee968c5af6f68728a7c0eac44--