Replace unsafe string functions with new added safe string functions. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo <lubo.zh...@intel.com> --- MdeModulePkg/Library/DxeNetLib/DxeNetLib.c | 4 ++-- MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c | 2 +- MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c | 2 +- .../Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c | 2 +- MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c | 2 +- .../Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c | 4 ++-- .../Universal/Network/Mtftp4Dxe/Mtftp4Support.c | 13 ++++++++----- .../Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c | 17 +++++++++-------- .../Universal/Network/UefiPxeBcDxe/PxeBcSupport.c | 12 +++++++----- .../Universal/Network/UefiPxeBcDxe/PxeBcSupport.h | 11 +++++++---- .../Universal/Network/VlanConfigDxe/VlanConfigImpl.c | 12 ++++++------ 11 files changed, 45 insertions(+), 36 deletions(-)
diff --git a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c index 467b822..81746d5 100644 --- a/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c +++ b/MdeModulePkg/Library/DxeNetLib/DxeNetLib.c @@ -2625,11 +2625,11 @@ NetLibDefaultAddressIsStatic ( Len = StrLen (ConfigHdr); ConfigResp = AllocateZeroPool ((Len + NIC_ITEM_CONFIG_SIZE * 2 + 100) * sizeof (CHAR16)); if (ConfigResp == NULL) { goto ON_EXIT; } - StrCpy (ConfigResp, ConfigHdr); + StrCpyS (ConfigResp, (Len + NIC_ITEM_CONFIG_SIZE * 2 + 100), ConfigHdr); String = ConfigResp + Len; UnicodeSPrint ( String, (8 + 4 + 7 + 4 + 1) * sizeof (CHAR16), @@ -3385,11 +3385,11 @@ NetLibIp6ToStr ( if ((UINTN)Ptr - (UINTN)Buffer > StringSize) { return EFI_BUFFER_TOO_SMALL; } - StrCpy (String, Buffer); + StrCpyS (String, StringSize, Buffer); return EFI_SUCCESS; } /** diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c index e263f0e..75fe12f 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c @@ -776,11 +776,11 @@ IScsiFormCallback ( IScsiUnicodeStrToAsciiStr (IfrNvData->TargetName, IScsiName); Status = IScsiNormalizeName (IScsiName, AsciiStrLen (IScsiName)); if (EFI_ERROR (Status)) { CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, L"Invalid iSCSI Name!", NULL); } else { - AsciiStrCpy (Private->Current->SessionConfigData.TargetName, IScsiName); + AsciiStrCpyS (Private->Current->SessionConfigData.TargetName, ISCSI_NAME_MAX_SIZE, IScsiName); } break; case KEY_DHCP_ENABLE: diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c index 79e7093..10ef629 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiDhcp.c @@ -156,11 +156,11 @@ IScsiDhcpExtractRootPath ( Status = IScsiNormalizeName (Field->Str, AsciiStrLen (Field->Str)); if (EFI_ERROR (Status)) { goto ON_EXIT; } - AsciiStrCpy (ConfigNvData->TargetName, Field->Str); + AsciiStrCpyS (ConfigNvData->TargetName, ISCSI_NAME_MAX_SIZE, Field->Str); ON_EXIT: FreePool (TmpStr); diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c index da14105..e3576c1 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiExtScsiPassThru.c @@ -242,11 +242,11 @@ IScsiExtScsiPassThruBuildDevicePath ( break; } CopyMem (&Node->Iscsi.Lun, ConfigNvData->BootLun, sizeof (UINT64)); Node->Iscsi.TargetPortalGroupTag = Session->TargetPortalGroupTag; - AsciiStrCpy ((CHAR8 *) Node + sizeof (ISCSI_DEVICE_PATH), ConfigNvData->TargetName); + AsciiStrCpyS ((CHAR8 *) Node + sizeof (ISCSI_DEVICE_PATH), AsciiStrLen (ConfigNvData->TargetName) + 1, ConfigNvData->TargetName); *DevicePath = (EFI_DEVICE_PATH_PROTOCOL *) Node; return EFI_SUCCESS; } diff --git a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c index 1cb1fb8..85a23a2 100644 --- a/MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c +++ b/MdeModulePkg/Universal/Network/IScsiDxe/IScsiMisc.c @@ -202,11 +202,11 @@ IScsiLunToUnicodeStr ( TempStr = Str; for (Index = 0; Index < 4; Index++) { if ((Lun[2 * Index] | Lun[2 * Index + 1]) == 0) { - StrCpy (TempStr, L"0-"); + CopyMem(TempStr, L"0-", StrSize(L"0-")); } else { TempStr[0] = (CHAR16) IScsiHexString[Lun[2 * Index] >> 4]; TempStr[1] = (CHAR16) IScsiHexString[Lun[2 * Index] & 0x0F]; TempStr[2] = (CHAR16) IScsiHexString[Lun[2 * Index + 1] >> 4]; TempStr[3] = (CHAR16) IScsiHexString[Lun[2 * Index + 1] & 0x0F]; diff --git a/MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c b/MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c index 89e1dda..7be3e87 100644 --- a/MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c +++ b/MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigNv.c @@ -485,14 +485,14 @@ Ip4DeviceExtractConfig ( Size = Size + 1; Size = Size + StrLen (FormResult) + 1; *Results = AllocateZeroPool (Size * sizeof (CHAR16)); ASSERT (*Results != NULL); StrPointer = *Results; - StrCpy (StrPointer, DeviceResult); + StrCpyS (StrPointer, Size, DeviceResult); StrPointer = StrPointer + StrLen (StrPointer); *StrPointer = L'&'; - StrCpy (StrPointer + 1, FormResult); + StrCpyS (StrPointer + 1, StrLen (FormResult) + 1, FormResult); FreePool (DeviceResult); FreePool (FormResult); } else if (HiiIsConfigHdrMatch (Request, &gEfiNicIp4ConfigVariableGuid, EFI_NIC_IP4_CONFIG_VARIABLE)) { *Results = DeviceResult; } else if (HiiIsConfigHdrMatch (Request, &gNicIp4ConfigNvDataGuid, EFI_NIC_IP4_CONFIG_VARIABLE)) { diff --git a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c index df79c85..85bdf5a 100644 --- a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c +++ b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Support.c @@ -317,21 +317,24 @@ Mtftp4SendRequest ( Packet = (EFI_MTFTP4_PACKET *) NetbufAllocSpace (Nbuf, Len, FALSE); ASSERT (Packet != NULL); Packet->OpCode = HTONS (Instance->Operation); Cur = Packet->Rrq.Filename; - Cur = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Token->Filename); + Cur = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len - 2, (CHAR8 *) Token->Filename); Cur += AsciiStrLen ((CHAR8 *) Token->Filename) + 1; - Cur = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Mode); + Cur = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len - (AsciiStrLen ((CHAR8 *) Token->Filename) + 1), (CHAR8 *) Mode); Cur += AsciiStrLen ((CHAR8 *) Mode) + 1; + Len -= ((UINT32) AsciiStrLen ((CHAR8 *) Token->Filename) + (UINT32) AsciiStrLen ((CHAR8 *) Mode) + 4); for (Index = 0; Index < Token->OptionCount; ++Index) { - Cur = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Options[Index].OptionStr); + Cur = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) Options[Index].OptionStr); Cur += AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1; + Len -= (AsciiStrLen ((CHAR8 *) Options[Index].OptionStr) + 1); - Cur = (UINT8 *) AsciiStrCpy ((CHAR8 *) Cur, (CHAR8 *) Options[Index].ValueStr); + Cur = (UINT8 *) AsciiStrCpyS ((CHAR8 *) Cur, Len, (CHAR8 *) Options[Index].ValueStr); Cur += AsciiStrLen ((CHAR8 *) (CHAR8 *) Options[Index].ValueStr) + 1; + Len -= (AsciiStrLen ((CHAR8 *) (CHAR8 *) Options[Index].ValueStr) + 1); } return Mtftp4SendPacket (Instance, Nbuf); } @@ -369,11 +372,11 @@ Mtftp4SendError ( ASSERT (TftpError != NULL); TftpError->OpCode = HTONS (EFI_MTFTP4_OPCODE_ERROR); TftpError->Error.ErrorCode = HTONS (ErrCode); - AsciiStrCpy ((CHAR8 *) TftpError->Error.ErrorMessage, (CHAR8 *) ErrInfo); + AsciiStrCpyS ((CHAR8 *) TftpError->Error.ErrorMessage, Len, (CHAR8 *) ErrInfo); return Mtftp4SendPacket (Instance, Packet); } diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c index aa73132..20747ed 100644 --- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c +++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcMtftp.c @@ -58,11 +58,11 @@ PxeBcCheckPacket ( Status = EFI_SUCCESS; if (Packet->OpCode == EFI_MTFTP4_OPCODE_ERROR) { Private->Mode.TftpErrorReceived = TRUE; Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode; - AsciiStrnCpy (Private->Mode.TftpError.ErrorString, (CHAR8 *) Packet->Error.ErrorMessage, PXE_MTFTP_ERROR_STRING_LENGTH); + AsciiStrnCpyS (Private->Mode.TftpError.ErrorString, PXE_MTFTP_ERROR_STRING_LENGTH, (CHAR8 *) Packet->Error.ErrorMessage, PXE_MTFTP_ERROR_STRING_LENGTH); Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = '\0'; } if (Callback != NULL) { @@ -133,17 +133,17 @@ PxeBcTftpGetFileSize ( return Status; } ReqOpt[0].OptionStr = (UINT8*)mMtftpOptions[PXE_MTFTP_OPTION_TSIZE_INDEX]; - UtoA10 (0, (CHAR8 *) OptBuf); + UtoA10 (0, (CHAR8 *) OptBuf, 128); ReqOpt[0].ValueStr = OptBuf; if (BlockSize != NULL) { ReqOpt[1].OptionStr = (UINT8*)mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX]; ReqOpt[1].ValueStr = ReqOpt[0].ValueStr + AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1; - UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[1].ValueStr); + UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[1].ValueStr, 128 - (AsciiStrLen ((CHAR8 *) ReqOpt[0].ValueStr) + 1)); OptCnt++; } Status = Mtftp4->GetInfo ( Mtftp4, @@ -158,12 +158,13 @@ PxeBcTftpGetFileSize ( if (EFI_ERROR (Status)) { if (Status == EFI_TFTP_ERROR) { Private->Mode.TftpErrorReceived = TRUE; Private->Mode.TftpError.ErrorCode = (UINT8) Packet->Error.ErrorCode; - AsciiStrnCpy ( - Private->Mode.TftpError.ErrorString, + AsciiStrnCpyS ( + Private->Mode.TftpError.ErrorString, + PXE_MTFTP_ERROR_STRING_LENGTH, (CHAR8 *) Packet->Error.ErrorMessage, PXE_MTFTP_ERROR_STRING_LENGTH ); Private->Mode.TftpError.ErrorString[PXE_MTFTP_ERROR_STRING_LENGTH - 1] = '\0'; } @@ -259,11 +260,11 @@ PxeBcTftpReadFile ( if (BlockSize != NULL) { ReqOpt[0].OptionStr = (UINT8*) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX]; ReqOpt[0].ValueStr = OptBuf; - UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr); + UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr, 128); OptCnt++; } Token.Event = NULL; Token.OverrideData = NULL; @@ -342,11 +343,11 @@ PxeBcTftpWriteFile ( if (BlockSize != NULL) { ReqOpt[0].OptionStr = (UINT8*) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX]; ReqOpt[0].ValueStr = OptBuf; - UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr); + UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr, 128); OptCnt++; } Token.Event = NULL; Token.OverrideData = NULL; @@ -416,11 +417,11 @@ PxeBcTftpReadDirectory ( if (BlockSize != NULL) { ReqOpt[0].OptionStr = (UINT8*) mMtftpOptions[PXE_MTFTP_OPTION_BLKSIZE_INDEX]; ReqOpt[0].ValueStr = OptBuf; - UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr); + UtoA10 (*BlockSize, (CHAR8 *) ReqOpt[0].ValueStr, 128); OptCnt++; } Token.Event = NULL; Token.OverrideData = NULL; diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c index 327e4a2..51d1a5a 100644 --- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c +++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c @@ -138,20 +138,22 @@ CvtNum ( /** Convert unsigned int number to decimal number. - @param Number The unsigned int number will be converted. - @param Buffer Pointer to the buffer to store the decimal number after transform. - + @param Number The unsigned int number will be converted. + @param Buffer Pointer to the buffer to store the decimal number after transform. + @param[in] BufferSize The maxsize of the buffer. + @return the length of the number after transform. **/ UINTN UtoA10 ( IN UINTN Number, - IN CHAR8 *Buffer + IN CHAR8 *Buffer, + IN UINTN BufferSize ) { UINTN Index; CHAR8 TempStr[64]; @@ -162,11 +164,11 @@ UtoA10 ( Index--; TempStr[Index] = (CHAR8) ('0' + (Number % 10)); Number = Number / 10; } while (Number != 0); - AsciiStrCpy (Buffer, &TempStr[Index]); + AsciiStrCpyS (Buffer, BufferSize, &TempStr[Index]); return AsciiStrLen (Buffer); } diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h index 96f48f5..89a6afa 100644 --- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h +++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h @@ -80,20 +80,23 @@ CvtNum ( /** Convert unsigned int number to decimal number. - @param Number The unsigned int number will be converted. - @param Buffer Pointer to the buffer to store the decimal number after transform. - + @param Number The unsigned int number will be converted. + @param Buffer Pointer to the buffer to store the decimal number after transform. + @param[in] BufferSize The maxsize of the buffer. + @return the length of the number after transform. **/ UINTN UtoA10 ( IN UINTN Number, - IN CHAR8 *Buffer + IN CHAR8 *Buffer, + IN UINTN BufferSize + ); /** Convert ASCII numeric string to a UINTN value. diff --git a/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c b/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c index fd8555e..baa3eb3 100644 --- a/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c +++ b/MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigImpl.c @@ -410,21 +410,21 @@ VlanUpdateForm ( ZeroMem (PrivateData->VlanId, MAX_VLAN_NUMBER); for (Index = 0; Index < NumberOfVlan; Index++) { String = VlanStr; - StrCpy (String, L" VLAN ID:"); + StrCpyS (String, 30, L" VLAN ID:"); String += 10; // // Pad VlanId string up to 4 characters with space // DigitalCount = UnicodeValueToString (VlanIdStr, 0, VlanData[Index].VlanId, 5); SetMem16 (String, (4 - DigitalCount) * sizeof (CHAR16), L' '); - StrCpy (String + 4 - DigitalCount, VlanIdStr); + StrCpyS (String + 4 - DigitalCount, 30 - 10 - (4 - DigitalCount), VlanIdStr); String += 4; - StrCpy (String, L", Priority:"); + StrCpyS (String, 30 - 10 - (4 - DigitalCount) - 4, L", Priority:"); String += 11; String += UnicodeValueToString (String, 0, VlanData[Index].Priority, 4); *String = 0; StringId = HiiSetString (PrivateData->HiiHandle, 0, VlanStr, NULL); @@ -557,13 +557,13 @@ InstallVlanConfigForm ( if (EFI_ERROR (Status)) { return Status; } PrivateData->MacString = MacString; - StrCpy (Str, L"VLAN Configuration (MAC:"); - StrnCat (Str, MacString, sizeof (EFI_MAC_ADDRESS) * 2); - StrCat (Str, L")"); + StrCpyS (Str, 26 + sizeof (EFI_MAC_ADDRESS) * 2 + 1, L"VLAN Configuration (MAC:"); + StrnCatS (Str, 26 + sizeof (EFI_MAC_ADDRESS) * 2 + 1 - StrLen(L"VLAN Configuration (MAC:"), MacString, sizeof (EFI_MAC_ADDRESS) * 2); + StrCatS (Str, 2, L")"); HiiSetString ( HiiHandle, STRING_TOKEN (STR_VLAN_FORM_SET_TITLE_HELP), Str, NULL -- 1.9.5.msysgit.1 ------------------------------------------------------------------------------ Don't Limit Your Business. Reach for the Cloud. GigeNET's Cloud Solutions provide you with the tools and support that you need to offload your IT needs and focus on growing your business. Configured For All Businesses. Start Your Cloud Today. https://www.gigenetcloud.com/ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel