From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by mx.groups.io with SMTP id smtpd.web11.6085.1680031471848504276 for ; Tue, 28 Mar 2023 12:24:31 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="body hash did not verify" header.i=@linux.microsoft.com header.s=default header.b=J4WrJ7u3; spf=pass (domain: linux.microsoft.com, ip: 13.77.154.182, mailfrom: mikuback@linux.microsoft.com) Received: from [192.168.4.22] (unknown [47.201.8.94]) by linux.microsoft.com (Postfix) with ESMTPSA id A7B3A20FD938; Tue, 28 Mar 2023 12:24:30 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com A7B3A20FD938 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1680031471; bh=crKDH91fSlWCfzJJ8EChukvre++eiDP4qbub3pW+xNE=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=J4WrJ7u3mIvIaknMSxKjiJF8BcpD/iSQkpquE4qAsJGGg3U4aAcXP1hYsYwYrnF3n mIHrHBzVN6N8g6F9opEYpzwtIj1QTqZMxUm3TvXW17JsfCiSwxPGl9zZ3yZCW6OTlR 7Z/ly3o5KDBE4PBYVYrJ5DMaLjALwcqNrRrmMh2c= Message-ID: <99becc09-aa31-aded-6d3e-b48d74b86c49@linux.microsoft.com> Date: Tue, 28 Mar 2023 15:24:29 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Subject: Re: [edk2-devel] [PATCH v7 09/12] ShellPkg: Fix conditionally uninitialized variables To: devel@edk2.groups.io, osd@smith-denny.com Cc: Erich McMillan , Michael D Kinney , Ray Ni , Zhichao Gao References: <20230324223034.1560-1-mikuback@linux.microsoft.com> <20230324223034.1560-10-mikuback@linux.microsoft.com> <3f708733-a5dd-de89-acdc-d49b9d0eb6b0@smith-denny.com> From: "Michael Kubacki" In-Reply-To: <3f708733-a5dd-de89-acdc-d49b9d0eb6b0@smith-denny.com> Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi Oliver, Thanks for taking time to look through the series. I responded inline. Thanks, Michael On 3/28/2023 2:49 PM, Oliver Smith-Denny wrote: > A couple comments below, thanks! >=20 > On 3/24/2023 3:30 PM, Michael Kubacki wrote: >> From: Michael Kubacki >> >> Fixes CodeQL alerts for CWE-457: >> https://cwe.mitre.org/data/definitions/457.html >> >> Cc: Erich McMillan >> Cc: Michael D Kinney >> Cc: Michael Kubacki >> Cc: Ray Ni >> Cc: Zhichao Gao >> Co-authored-by: Erich McMillan >> Signed-off-by: Michael Kubacki >> Reviewed-by: Zhichao Gao >> --- >> =C2=A0 ShellPkg/Application/Shell/Shell.c=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 1 + >> =C2=A0 ShellPkg/Application/Shell/ShellProtocol.c=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 | 60=20 >> ++++++++++---------- >> =C2=A0 ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c=C2=A0 = | 56=20 >> +++++++++--------- >> =C2=A0 ShellPkg/Library/UefiShellDebug1CommandsLib/Dblk.c=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | 18 +++--- >> =C2=A0 ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c |=C2= =A0 9 ++- >> =C2=A0 ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 | 14 +++-- >> =C2=A0 ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c=C2=A0= =C2=A0 | 17 ++++-- >> =C2=A0 ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 | 21=20 >> +++---- >> =C2=A0 8 files changed, 107 insertions(+), 89 deletions(-) >> >> diff --git a/ShellPkg/Application/Shell/Shell.c=20 >> b/ShellPkg/Application/Shell/Shell.c >> index 0ae6e14a34bf..f95c799bb2a4 100644 >> --- a/ShellPkg/Application/Shell/Shell.c >> +++ b/ShellPkg/Application/Shell/Shell.c >> @@ -1300,6 +1300,7 @@ DoStartupScript ( >> =C2=A0=C2=A0=C2=A0 CHAR16=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 *FullFileStringPath; >> =C2=A0=C2=A0=C2=A0 UINTN=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 NewSize; >> +=C2=A0 CalleeStatus=C2=A0=C2=A0=C2=A0 =3D EFI_SUCCESS; >> =C2=A0=C2=A0=C2=A0 Key.UnicodeChar =3D CHAR_NULL; >> =C2=A0=C2=A0=C2=A0 Key.ScanCode=C2=A0=C2=A0=C2=A0 =3D 0; >> diff --git a/ShellPkg/Application/Shell/ShellProtocol.c=20 >> b/ShellPkg/Application/Shell/ShellProtocol.c >> index e6d20ab16479..da8c31cb038a 100644 >> --- a/ShellPkg/Application/Shell/ShellProtocol.c >> +++ b/ShellPkg/Application/Shell/ShellProtocol.c >> @@ -735,50 +735,52 @@ EfiShellGetDeviceName ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Now check the parent controller using = this as the child. >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0 if (DeviceNameToReturn =3D=3D NULL) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PARSE_HANDLE_DATABASE_PARENTS (DeviceHan= dle,=20 >> &ParentControllerCount, &ParentControllerBuffer); >> +=C2=A0=C2=A0=C2=A0 Status =3D PARSE_HANDLE_DATABASE_PARENTS (DeviceHand= le,=20 >> &ParentControllerCount, &ParentControllerBuffer); >> +=C2=A0=C2=A0=C2=A0 if ((DeviceNameToReturn =3D=3D NULL) && !EFI_ERROR (= Status)) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (LoopVar =3D 0; LoopVar <= ParentControllerCount; LoopVar++) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PARSE_HANDLE_DATABASE_UEFI_D= RIVERS=20 >> (ParentControllerBuffer[LoopVar], &ParentDriverCount,=20 >> &ParentDriverBuffer); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (HandleCount =3D 0; Hand= leCount < ParentDriverCount;=20 >> HandleCount++) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // try using tha= t driver's component name with controller=20 >> and our driver as the child. >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D gBS->= OpenProtocol ( >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 ParentDriverBuffer[HandleCount], >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 &gEfiComponentName2ProtocolGuid, >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 (VOID **)&CompName2, >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 gImageHandle, >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 NULL, >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 EFI_OPEN_PROTOCOL_GET_PROTOCOL >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 ); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (EFI_ERROR (S= tatus)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D PARSE_HANDLE_DATA= BASE_UEFI_DRIVERS=20 >> (ParentControllerBuffer[LoopVar], &ParentDriverCount,=20 >> &ParentDriverBuffer); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (HandleCount= =3D 0; HandleCount < ParentDriverCount;=20 >> HandleCount++) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // t= ry using that driver's component name with controller=20 >> and our driver as the child. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 Status =3D gBS->OpenProtocol ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ParentDriverBuffer[HandleCount], >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 &gEfiComponentNameProtocolGuid, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 &gEfiComponentName2ProtocolGuid, >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 (VOID **)&CompName2, >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 gImageHandle, >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL, >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_OPEN_PROTOCOL_GET_PROTOCOL >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (= EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 Status =3D gBS->OpenProtocol ( >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ParentDriverBuffer[HandleCount], >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 &gEfiComponentNameProtocolGuid, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (VOID **)&CompName2, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 gImageHandle, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL, >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 EFI_OPEN_PROTOCOL_GET_PROTOCOL >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (= EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 continue; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (EFI_ERROR (S= tatus)) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 cont= inue; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Lang= =C2=A0=C2=A0 =3D GetBestLanguageForDriver=20 >> (CompName2->SupportedLanguages, Language, FALSE); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Stat= us =3D CompName2->GetControllerName (CompName2,=20 >> ParentControllerBuffer[LoopVar], DeviceHandle, Lang,=20 >> &DeviceNameToReturn); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Free= Pool (Lang); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Lang= =3D NULL; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (= !EFI_ERROR (Status) && (DeviceNameToReturn !=3D NULL)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 break; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Lang=C2=A0=C2=A0= =3D GetBestLanguageForDriver=20 >> (CompName2->SupportedLanguages, Language, FALSE); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D CompN= ame2->GetControllerName (CompName2,=20 >> ParentControllerBuffer[LoopVar], DeviceHandle, Lang,=20 >> &DeviceNameToReturn); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FreePool (Lang); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Lang =3D NULL; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SHELL_FREE_NON_N= ULL (ParentDriverBuffer); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!= EFI_ERROR (Status) && (DeviceNameToReturn !=3D NULL)) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 break; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> - >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SHELL_FREE_NON_NULL (ParentD= riverBuffer); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (Status) && (= DeviceNameToReturn !=3D NULL)) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 break; >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SHELL_FREE_NON_NULL (ParentCo= ntrollerBuffer); >> diff --git=20 >> a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c=20 >> b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c >> index 36cf46fb2c38..4549cbde9b9a 100644 >> --- a/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c >> +++ b/ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.c >> @@ -1399,10 +1399,11 @@ ShellCommandCreateInitialMappingsAndPaths ( >> =C2=A0=C2=A0=C2=A0 CHAR16=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 *MapN= ame; >> =C2=A0=C2=A0=C2=A0 SHELL_MAP_LIST=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 *MapListItem; >> -=C2=A0 SplitCurDir =3D NULL; >> -=C2=A0 MapName=C2=A0=C2=A0=C2=A0=C2=A0 =3D NULL; >> -=C2=A0 MapListItem =3D NULL; >> -=C2=A0 HandleList=C2=A0 =3D NULL; >> +=C2=A0 ConsistMappingTable =3D NULL; >> +=C2=A0 SplitCurDir=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D = NULL; >> +=C2=A0 MapName=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 =3D NULL; >> +=C2=A0 MapListItem=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 =3D = NULL; >> +=C2=A0 HandleList=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =3D NULL; >> =C2=A0=C2=A0=C2=A0 // >> =C2=A0=C2=A0=C2=A0 // Reset the static members back to zero >> @@ -1458,32 +1459,35 @@ ShellCommandCreateInitialMappingsAndPaths ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PerformQuickSort (DevicePathList, Count, = sizeof=20 >> (EFI_DEVICE_PATH_PROTOCOL *), DevicePathCompare); >> -=C2=A0=C2=A0=C2=A0 ShellCommandConsistMappingInitialize (&ConsistMappin= gTable); >> -=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0 // Assign new Mappings to all... >> -=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0 for (Count =3D 0; HandleList[Count] !=3D NULL; Count= ++) { >> +=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (ShellCommandConsistMappingInitialize= =20 >> (&ConsistMappingTable))) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Get default name first >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Assign new Mappings to all... >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NewDefaultName =3D ShellCommandCreateNew= MappingName=20 >> (MappingTypeFileSystem); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ASSERT (NewDefaultName !=3D NULL); >=20 > Should we be checking for NewDefaultName to not be NULL before doing the= =20 > below function call? Looks like ShellCommandAddMapItemAndUpdatePath does= =20 > not do NULL checking and directly uses the Name (where it would fail in= =20 > StrSize()). Similarly we then call FreePool on it, even if it is NULL. >=20 Yes, but that's outside the scope of this patch. If someone were to fix=20 that, they should also address the other ~20 places in the file that use=20 asserts in place of checking null properly. >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D ShellCommandAddMapItemAndUpda= tePath (NewDefaultName,=20 >> DevicePathList[Count], 0, TRUE); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ASSERT_EFI_ERROR (Status); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FreePool (NewDefaultName); >> - >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Now do consistent name >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NewConsistName =3D ShellCommandConsistMa= ppingGenMappingName=20 >> (DevicePathList[Count], ConsistMappingTable); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (NewConsistName !=3D NULL) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D ShellCommandAddMa= pItemAndUpdatePath (NewConsistName,=20 >> DevicePathList[Count], 0, FALSE); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 for (Count =3D 0; HandleList[Count] !=3D= NULL; Count++) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Get default name first >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NewDefaultName =3D ShellComm= andCreateNewMappingName=20 >> (MappingTypeFileSystem); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ASSERT (NewDefaultName !=3D = NULL); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D ShellCommandAddMa= pItemAndUpdatePath (NewDefaultName,=20 >> DevicePathList[Count], 0, TRUE); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ASSERT_EFI_ERROR = (Status); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FreePool (NewConsistName); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FreePool (NewDefaultName); >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Now do consistent name >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NewConsistName =3D ShellComm= andConsistMappingGenMappingName=20 >> (DevicePathList[Count], ConsistMappingTable); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (NewConsistName !=3D NULL= ) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D Shell= CommandAddMapItemAndUpdatePath=20 >> (NewConsistName, DevicePathList[Count], 0, FALSE); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ASSERT_EFI_ERROR= (Status); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 FreePool (NewCon= sistName); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> -=C2=A0=C2=A0=C2=A0 ShellCommandConsistMappingUnInitialize (ConsistMappi= ngTable); >> +=C2=A0=C2=A0=C2=A0 if (ConsistMappingTable !=3D NULL) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellCommandConsistMappingUnInitialize (= ConsistMappingTable); >> +=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SHELL_FREE_NON_NULL (HandleList); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 SHELL_FREE_NON_NULL (DevicePathList); >> @@ -1626,12 +1630,12 @@ ShellCommandUpdateMapping ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 PerformQuickSort (DevicePathList, Count, = sizeof=20 >> (EFI_DEVICE_PATH_PROTOCOL *), DevicePathCompare); >> -=C2=A0=C2=A0=C2=A0 ShellCommandConsistMappingInitialize (&ConsistMappin= gTable); >> +=C2=A0=C2=A0=C2=A0 Status =3D ShellCommandConsistMappingInitialize=20 >> (&ConsistMappingTable); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Assign new Mappings to remainders >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> -=C2=A0=C2=A0=C2=A0 for (Count =3D 0; !EFI_ERROR (Status) && HandleList[= Count] !=3D NULL=20 >> && !EFI_ERROR (Status); Count++) { >> +=C2=A0=C2=A0=C2=A0 for (Count =3D 0; !EFI_ERROR (Status) && HandleList[= Count] !=3D NULL;=20 >> Count++) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // Skip ones that already hav= e >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // >> diff --git a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dblk.c=20 >> b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dblk.c >> index 97a4b57a932f..5329b559ba46 100644 >> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/Dblk.c >> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/Dblk.c >> @@ -158,7 +158,10 @@ ShellCommandRunDblk ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shell= Status =3D SHELL_INVALID_PARAMETER; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellConvertStringToUint64 (= LbaString, &Lba, TRUE, FALSE); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (EFI_ERROR (ShellConvertS= tringToUint64 (LbaString, &Lba,=20 >> TRUE, FALSE))) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellPrintHiiEx = (-1, -1, NULL, STRING_TOKEN=20 >> (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", LbaString); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellStatus =3D = SHELL_INVALID_PARAMETER; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (BlockCountString =3D=3D N= ULL) { >> @@ -169,12 +172,13 @@ ShellCommandRunDblk ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shell= Status =3D SHELL_INVALID_PARAMETER; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellConvertStringToUint64 (= BlockCountString, &BlockCount,=20 >> TRUE, FALSE); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (BlockCount > 0x10) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 BlockCount =3D 0= x10; >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (BlockCount =3D=3D= 0) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellPrintHiiEx = (-1, -1, NULL, STRING_TOKEN=20 >> (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockCountString); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellStatus =3D = SHELL_INVALID_PARAMETER; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (ShellConvert= StringToUint64 (BlockCountString,=20 >> &BlockCount, TRUE, FALSE))) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (BlockCount >= 0x10) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Bloc= kCount =3D 0x10; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else if (Block= Count =3D=3D 0) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shel= lPrintHiiEx (-1, -1, NULL, STRING_TOKEN=20 >> (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockCountString); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shel= lStatus =3D SHELL_INVALID_PARAMETER; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> diff --git=20 >> a/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c=20 >> b/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c >> index 8bf23a2076a1..72f8c087cb69 100644 >> --- a/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c >> +++ b/ShellPkg/Library/UefiShellDebug1CommandsLib/EfiDecompress.c >> @@ -112,10 +112,13 @@ ShellCommandRunEfiDecompress ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (ShellStatus = =3D=3D SHELL_SUCCESS) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Statu= s =3D FileHandleGetSize (InFileHandle, &Temp64Bit); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ASSERT (Temp64Bi= t <=3D (UINT32)(-1)); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 InSize =3D (UINT= N)Temp64Bit; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ASSER= T_EFI_ERROR (Status); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 InBuffer =3D All= ocateZeroPool (InSize); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (= Status)) { >=20 > nit: If we got an EFI_ERROR from FileHandleGetSize, we will return=20 > EFI_OUT_OF_RESOURCES when we hit InBuffer =3D=3D NULL below, which is not= =20 > the real reason we failed. Perhaps we don't care, though. >=20 True. The goal here was not to change that behavior. >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ASSE= RT (Temp64Bit <=3D (UINT32)(-1)); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 InSi= ze=C2=A0=C2=A0 =3D (UINTN)Temp64Bit; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 InBu= ffer =3D AllocateZeroPool (InSize); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (I= nBuffer =3D=3D NULL) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 Status =3D EFI_OUT_OF_RESOURCES; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } els= e { >> diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c=20 >> b/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c >> index d7a133c0c5b4..870c5b0d1da7 100644 >> --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c >> +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c >> @@ -508,9 +508,10 @@ ShellCommandRunConnect ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Count=C2=A0 =3D ShellCommandL= ineGetCount (Package); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (Param1 !=3D NULL) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status=C2=A0 =3D ShellConver= tStringToUint64 (Param1, &Intermediate,=20 >> TRUE, FALSE); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle1 =3D ConvertHandleInd= exToHandle ((UINTN)Intermediate); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D ShellConvertStrin= gToUint64 (Param1, &Intermediate,=20 >> TRUE, FALSE); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle1 =3D Conv= ertHandleIndexToHandle ((UINTN)Intermediate); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shell= PrintHiiEx (-1, -1, NULL, STRING_TOKEN=20 >> (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param1); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shell= Status =3D SHELL_INVALID_PARAMETER; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> @@ -519,9 +520,10 @@ ShellCommandRunConnect ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (Param2 !=3D NULL) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status=C2=A0 =3D ShellConver= tStringToUint64 (Param2, &Intermediate,=20 >> TRUE, FALSE); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle2 =3D ConvertHandleInd= exToHandle ((UINTN)Intermediate); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D ShellConvertStrin= gToUint64 (Param2, &Intermediate,=20 >> TRUE, FALSE); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (Status)) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle2 =3D Conv= ertHandleIndexToHandle ((UINTN)Intermediate); >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } else { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shell= PrintHiiEx (-1, -1, NULL, STRING_TOKEN=20 >> (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"connect", Param2); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shell= Status =3D SHELL_INVALID_PARAMETER; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c= =20 >> b/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c >> index 009ae5282b27..fd49d1f7ceb4 100644 >> --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c >> +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c >> @@ -160,12 +160,17 @@ ShellCommandRunDisconnect ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Param1 =3D ShellC= ommandLineGetRawValue (Package, 1); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Param2 =3D ShellC= ommandLineGetRawValue (Package, 2); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Param3 =3D ShellC= ommandLineGetRawValue (Package, 3); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellConvertStringToUint64 (= Param1, &Intermediate1, TRUE,=20 >> FALSE); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle1 =3D Param1 !=3D NULL= ? ConvertHandleIndexToHandle=20 >> ((UINTN)Intermediate1) : NULL; >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellConvertStringToUint64 (= Param2, &Intermediate2, TRUE,=20 >> FALSE); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle2 =3D Param2 !=3D NULL= ? ConvertHandleIndexToHandle=20 >> ((UINTN)Intermediate2) : NULL; >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellConvertStringToUint64 (= Param3, &Intermediate3, TRUE,=20 >> FALSE); >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle3 =3D Param3 !=3D NULL= ? ConvertHandleIndexToHandle=20 >> ((UINTN)Intermediate3) : NULL; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (ShellConvert= StringToUint64 (Param1,=20 >> &Intermediate1, TRUE, FALSE))) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle1 =3D Para= m1 !=3D NULL ? ConvertHandleIndexToHandle=20 >> ((UINTN)Intermediate1) : NULL; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (ShellConvert= StringToUint64 (Param2,=20 >> &Intermediate2, TRUE, FALSE))) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle2 =3D Para= m2 !=3D NULL ? ConvertHandleIndexToHandle=20 >> ((UINTN)Intermediate2) : NULL; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> + >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (!EFI_ERROR (ShellConvert= StringToUint64 (Param3,=20 >> &Intermediate3, TRUE, FALSE))) { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle3 =3D Para= m3 !=3D NULL ? ConvertHandleIndexToHandle=20 >> ((UINTN)Intermediate3) : NULL; >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if ((Param1 !=3D = NULL) && (Handle1 =3D=3D NULL)) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Shell= PrintHiiEx (-1, -1, NULL, STRING_TOKEN=20 >> (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, L"disconnect", Param1); >> diff --git a/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c=20 >> b/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c >> index c645c9fd6882..8f70d6b6af39 100644 >> --- a/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c >> +++ b/ShellPkg/Library/UefiShellDriver1CommandsLib/DrvDiag.c >> @@ -438,25 +438,22 @@ ShellCommandRunDrvDiag ( >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ControllerHandleStr =3D ShellCommandLineG= etRawValue (Package, 2); >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ChildHandleStr=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 =3D ShellCommandLineGetRawValue (Package, 3); >> -=C2=A0=C2=A0=C2=A0 if (DriverHandleStr =3D=3D NULL) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle1 =3D NULL; >> -=C2=A0=C2=A0=C2=A0 } else { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellConvertStringToUint64 (DriverHandle= Str, &Intermediate,=20 >> TRUE, FALSE); >> +=C2=A0=C2=A0=C2=A0 if ((DriverHandleStr !=3D NULL) && ShellConvertStrin= gToUint64=20 >> (DriverHandleStr, &Intermediate, TRUE, FALSE)) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle1 =3D ConvertHandleInde= xToHandle ((UINTN)Intermediate); >> +=C2=A0=C2=A0=C2=A0 } else { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle1 =3D NULL; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> -=C2=A0=C2=A0=C2=A0 if (ControllerHandleStr =3D=3D NULL) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle2 =3D NULL; >> -=C2=A0=C2=A0=C2=A0 } else { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellConvertStringToUint64 (ControllerHa= ndleStr, &Intermediate,=20 >> TRUE, FALSE); >> +=C2=A0=C2=A0=C2=A0 if ((ControllerHandleStr !=3D NULL) && ShellConvertS= tringToUint64=20 >> (ControllerHandleStr, &Intermediate, TRUE, FALSE)) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle2 =3D ConvertHandleInde= xToHandle ((UINTN)Intermediate); >> +=C2=A0=C2=A0=C2=A0 } else { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle2 =3D NULL; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> -=C2=A0=C2=A0=C2=A0 if (ChildHandleStr =3D=3D NULL) { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle3 =3D NULL; >> -=C2=A0=C2=A0=C2=A0 } else { >> -=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ShellConvertStringToUint64 (ChildHandleS= tr, &Intermediate,=20 >> TRUE, FALSE); >> +=C2=A0=C2=A0=C2=A0 if ((ChildHandleStr !=3D NULL) && ShellConvertString= ToUint64=20 >> (ChildHandleStr, &Intermediate, TRUE, FALSE)) { >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle3 =3D ConvertHandleInde= xToHandle ((UINTN)Intermediate); >> +=C2=A0=C2=A0=C2=A0 } else { >> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Handle3 =3D NULL; >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Status =3D DoDiagnostics ( >=20 >=20 >=20 >=20