public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [Patch V2 0/3] EmulatorPkg: Fix VS20xx IA32 boot and simplify build config
@ 2019-08-08  2:25 Michael D Kinney
  2019-08-08  2:25 ` [Patch V2 1/3] EmulatorPkg: Fix VS20xx IA32 boot failure Michael D Kinney
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Michael D Kinney @ 2019-08-08  2:25 UTC (permalink / raw)
  To: devel; +Cc: Jordan Justen, Andrew Fish, Ray Ni

New in V2
=========
* Fix size values in safe string function calls.
* Update POSIX sources to use AsciiStrCpyS() and AsciiStrCatS().
* Verify that no exceptions occur if EMU_MAGIC_PAGE() can not be mapped.  An
  error message is generated and the host app exits normally.
* Update EmulatorPkg DEC file with a new PcdPeiServicesTablePage default value
  that works for Windows/POSIX hosts for both IA32 and X64.

https://bugzilla.tianocore.org/show_bug.cgi?id=162
https://bugzilla.tianocore.org/show_bug.cgi?id=2055
https://bugzilla.tianocore.org/show_bug.cgi?id=2056

* Fix VS20xx IA32 boot failure
* Remove UNIX_SEC_BUILD/WIN_SEC_BUILD
* Add -D DISABLE_NEW_DEPRECATED_INTERFACES

Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>

Michael D Kinney (3):
  EmulatorPkg: Fix VS20xx IA32 boot failure
  EmulatorPkg: Remove UNIX_SEC_BUILD/WIN_SEC_BUILD
  EmulatorPkg: Add -D DISABLE_NEW_DEPRECATED_INTERFACES

 EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c |   9 +-
 EmulatorPkg/EmulatorPkg.dec                   |   4 +-
 EmulatorPkg/EmulatorPkg.dsc                   |  32 ++---
 EmulatorPkg/FlashMapPei/FlashMapPei.c         |   8 +-
 EmulatorPkg/Library/SmbiosLib/SmbiosLib.c     |   4 +-
 .../ThunkProtocolList/ThunkProtocolList.c     |  11 +-
 EmulatorPkg/Readme.md                         |   8 +-
 EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c  |   8 +-
 EmulatorPkg/Unix/Host/PosixFileSystem.c       |  77 ++++++++----
 EmulatorPkg/Unix/Host/X11GraphicsWindow.c     |   4 +-
 EmulatorPkg/Win/Host/WinFileSystem.c          | 116 ++++++++++++------
 EmulatorPkg/Win/VS2017/BuildVS.bat            |   2 +-
 EmulatorPkg/build.sh                          |   8 +-
 13 files changed, 193 insertions(+), 98 deletions(-)

-- 
2.21.0.windows.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Patch V2 1/3] EmulatorPkg: Fix VS20xx IA32 boot failure
  2019-08-08  2:25 [Patch V2 0/3] EmulatorPkg: Fix VS20xx IA32 boot and simplify build config Michael D Kinney
@ 2019-08-08  2:25 ` Michael D Kinney
  2019-08-08  5:54   ` [edk2-devel] " Wu, Hao A
  2019-08-08  2:25 ` [Patch V2 2/3] EmulatorPkg: Remove UNIX_SEC_BUILD/WIN_SEC_BUILD Michael D Kinney
  2019-08-08  2:25 ` [Patch V2 3/3] EmulatorPkg: Add -D DISABLE_NEW_DEPRECATED_INTERFACES Michael D Kinney
  2 siblings, 1 reply; 8+ messages in thread
From: Michael D Kinney @ 2019-08-08  2:25 UTC (permalink / raw)
  To: devel; +Cc: Jordan Justen, Andrew Fish, Ray Ni

https://bugzilla.tianocore.org/show_bug.cgi?id=2056

The IA32 build of the EmulatorPkg for VS20xx does not boot
because the default value of PCD PcdPeiServicesTablePage
rarely succeeds to be mapped on IA32 Windows Host Environments.
Change the DEC default value for this PCD to a value that
is compatible with Windows and POSIX host environments for
IA32 and X64.  For IA32 builds, this 64-bit PCD is truncated
to a 32-bit value.

PcdPeiServicesTablePage is changed from 0x1003000000 to
0x1013000000.  With this new value, no boot failures are
observed.  However, the use of this hard coded value can
potentially cause a boot failure if this address specified
by the PCD is already allocated in the user process.

Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
 EmulatorPkg/EmulatorPkg.dec | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/EmulatorPkg/EmulatorPkg.dec b/EmulatorPkg/EmulatorPkg.dec
index c36f2c4186..99250d9fe5 100644
--- a/EmulatorPkg/EmulatorPkg.dec
+++ b/EmulatorPkg/EmulatorPkg.dec
@@ -2,7 +2,7 @@
 #
 # This is the Emu Emulation Environment Platform
 #
-# Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>
 # Portions copyright (c) 2011, Apple Inc. All rights reserved.
 #
 #    SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -66,7 +66,7 @@ [PcdsFixedAtBuild]
   gEmulatorPkgTokenSpaceGuid.PcdEmuApCount|L"0"|VOID*|0x00001019
 
   ## Magic page to implement PEI Services Table Pointer Lib
-  gEmulatorPkgTokenSpaceGuid.PcdPeiServicesTablePage|0x1003000000|UINT64|0x0000101b
+  gEmulatorPkgTokenSpaceGuid.PcdPeiServicesTablePage|0x1013000000|UINT64|0x0000101b
 
   ## Size of the packet filter
   gEmulatorPkgTokenSpaceGuid.PcdNetworkPacketFilterSize|524288|UINT32|0x0000101c
-- 
2.21.0.windows.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Patch V2 2/3] EmulatorPkg: Remove UNIX_SEC_BUILD/WIN_SEC_BUILD
  2019-08-08  2:25 [Patch V2 0/3] EmulatorPkg: Fix VS20xx IA32 boot and simplify build config Michael D Kinney
  2019-08-08  2:25 ` [Patch V2 1/3] EmulatorPkg: Fix VS20xx IA32 boot failure Michael D Kinney
@ 2019-08-08  2:25 ` Michael D Kinney
  2019-08-08  5:55   ` [edk2-devel] " Wu, Hao A
  2019-08-08  2:25 ` [Patch V2 3/3] EmulatorPkg: Add -D DISABLE_NEW_DEPRECATED_INTERFACES Michael D Kinney
  2 siblings, 1 reply; 8+ messages in thread
From: Michael D Kinney @ 2019-08-08  2:25 UTC (permalink / raw)
  To: devel; +Cc: Jordan Justen, Andrew Fish, Ray Ni

https://bugzilla.tianocore.org/show_bug.cgi?id=2055

Remove the use of the defines UNIX_SEC_BUILD and
WIN_SEC_BUILD.  This simplifies the build command
for the EmulatorPkg.  Instead, use !if statements
in the DSC file using $(ARCH) and $(FAMILY) to
determine if the build is for a Windows or POSIX
environment.

The Readme.md, BAT, and sh files are also updated
to remove the use of these defines.

Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
 EmulatorPkg/EmulatorPkg.dsc        | 26 +++++++++++++-------------
 EmulatorPkg/Readme.md              |  8 ++++----
 EmulatorPkg/Win/VS2017/BuildVS.bat |  2 +-
 EmulatorPkg/build.sh               |  8 ++++----
 4 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc
index ea8b6ce76e..153da464f1 100644
--- a/EmulatorPkg/EmulatorPkg.dsc
+++ b/EmulatorPkg/EmulatorPkg.dsc
@@ -4,7 +4,7 @@
 # The Emulation Platform can be used to debug individual modules, prior to creating
 # a real platform. This also provides an example for how an DSC is created.
 #
-# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 # Portions copyright (c) 2010 - 2011, Apple Inc. All rights reserved.<BR>
 #
 # SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -236,18 +236,18 @@ [PcdsDynamicHii.common.DEFAULT]
   gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|10
 
 [Components]
-!ifdef $(UNIX_SEC_BUILD)
-  ##
-  #  Emulator, OS POSIX application
-  ##
-  EmulatorPkg/Unix/Host/Host.inf
-!endif
-
-!ifdef $(WIN_SEC_BUILD)
-  ##
-  #  Emulator, OS WIN application
-  ##
-  EmulatorPkg/Win/Host/WinHost.inf
+!if "IA32" in $(ARCH) || "X64" in $(ARCH)
+  !if "MSFT" in $(FAMILY)
+    ##
+    #  Emulator, OS WIN application
+    ##
+    EmulatorPkg/Win/Host/WinHost.inf
+  !else
+    ##
+    #  Emulator, OS POSIX application
+    ##
+    EmulatorPkg/Unix/Host/Host.inf
+  !endif
 !endif
 
 !ifndef $(SKIP_MAIN_BUILD)
diff --git a/EmulatorPkg/Readme.md b/EmulatorPkg/Readme.md
index 461975e859..5ea61ca7ab 100644
--- a/EmulatorPkg/Readme.md
+++ b/EmulatorPkg/Readme.md
@@ -21,19 +21,19 @@ https://github.com/tianocore/tianocore.github.io/wiki/EmulatorPkg
 **You can use the following command to build.**
   * 32bit emulator in Windows:
 
-    `build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -D WIN_SEC_BUILD -a IA32`
+    `build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -a IA32`
 
   * 64bit emulator in Windows:
 
-    `build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -D WIN_SEC_BUILD -a X64`
+    `build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -a X64`
 
   * 32bit emulator in Linux:
 
-    `build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -D UNIX_SEC_BUILD -a IA32`
+    `build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -a IA32`
 
   * 64bit emulator in Linux:
 
-    `build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -D UNIX_SEC_BUILD -a X64`
+    `build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -a X64`
 
 **You can start/run the emulator using the following command:**
   * 32bit emulator in Windows:
diff --git a/EmulatorPkg/Win/VS2017/BuildVS.bat b/EmulatorPkg/Win/VS2017/BuildVS.bat
index 83aebc77dc..6fcf40cc0a 100644
--- a/EmulatorPkg/Win/VS2017/BuildVS.bat
+++ b/EmulatorPkg/Win/VS2017/BuildVS.bat
@@ -1,3 +1,3 @@
 cd ../../../
 @call edksetup.bat
-build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -D WIN_SEC_BUILD %*
+build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 %*
diff --git a/EmulatorPkg/build.sh b/EmulatorPkg/build.sh
index 2dab035ed5..60056e1b6c 100755
--- a/EmulatorPkg/build.sh
+++ b/EmulatorPkg/build.sh
@@ -233,13 +233,13 @@ fi
 
 case $CLEAN_TYPE in
   clean)
-    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -D UNIX_SEC_BUILD -n 3 clean
+    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -n 3 clean
     build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean
     exit $?
     ;;
   cleanall)
     make -C $WORKSPACE/BaseTools clean
-    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -D UNIX_SEC_BUILD -n 3 clean
+    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS -n 3 clean
     build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean
     build -p $WORKSPACE/ShellPkg/ShellPkg.dsc -a IA32 -b $BUILDTARGET -t $TARGET_TOOLS -n 3 clean
     exit $?
@@ -251,9 +251,9 @@ esac
 # Build the edk2 EmulatorPkg
 #
 if [[ $HOST_TOOLS == $TARGET_TOOLS ]]; then
-  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D BUILD_$ARCH_SIZE -D UNIX_SEC_BUILD $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n 3
+  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D BUILD_$ARCH_SIZE $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n 3
 else
-  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS  -D BUILD_$ARCH_SIZE -D UNIX_SEC_BUILD -D SKIP_MAIN_BUILD -n 3 modules
+  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS  -D BUILD_$ARCH_SIZE -D SKIP_MAIN_BUILD -n 3 modules
   build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D BUILD_$ARCH_SIZE $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n 3
   cp "$BUILD_OUTPUT_DIR/${BUILDTARGET}_$HOST_TOOLS/$PROCESSOR/Host" $BUILD_ROOT_ARCH
 fi
-- 
2.21.0.windows.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Patch V2 3/3] EmulatorPkg: Add -D DISABLE_NEW_DEPRECATED_INTERFACES
  2019-08-08  2:25 [Patch V2 0/3] EmulatorPkg: Fix VS20xx IA32 boot and simplify build config Michael D Kinney
  2019-08-08  2:25 ` [Patch V2 1/3] EmulatorPkg: Fix VS20xx IA32 boot failure Michael D Kinney
  2019-08-08  2:25 ` [Patch V2 2/3] EmulatorPkg: Remove UNIX_SEC_BUILD/WIN_SEC_BUILD Michael D Kinney
@ 2019-08-08  2:25 ` Michael D Kinney
  2019-08-08  5:56   ` [edk2-devel] " Wu, Hao A
  2 siblings, 1 reply; 8+ messages in thread
From: Michael D Kinney @ 2019-08-08  2:25 UTC (permalink / raw)
  To: devel; +Cc: Jordan Justen, Andrew Fish, Ray Ni

https://bugzilla.tianocore.org/show_bug.cgi?id=162

Update EmulatorPkg specific modules and libraries to use
safe string functions in BaseLib and safe PcdSetxx()
functions in PcdLib.  With these updates, the define
DISABLE_NEW_DEPRECATED_INTERFACES is enabled in the DSC
file.

Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
---
 EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c |   9 +-
 EmulatorPkg/EmulatorPkg.dsc                   |   6 +-
 EmulatorPkg/FlashMapPei/FlashMapPei.c         |   8 +-
 EmulatorPkg/Library/SmbiosLib/SmbiosLib.c     |   4 +-
 .../ThunkProtocolList/ThunkProtocolList.c     |  11 +-
 EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c  |   8 +-
 EmulatorPkg/Unix/Host/PosixFileSystem.c       |  77 ++++++++----
 EmulatorPkg/Unix/Host/X11GraphicsWindow.c     |   4 +-
 EmulatorPkg/Win/Host/WinFileSystem.c          | 116 ++++++++++++------
 9 files changed, 169 insertions(+), 74 deletions(-)

diff --git a/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c b/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
index 0bf6e723a1..d8380f2be9 100644
--- a/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
+++ b/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
@@ -1,7 +1,7 @@
 /** @file
  Emu Bus driver
 
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 Portions copyright (c) 2011, Apple Inc. All rights reserved.
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -256,7 +256,12 @@ EmuBusDriverBindingStart (
 
       EmuDevice->ControllerNameTable = NULL;
 
-      StrnCpy (ComponentName, EmuIoThunk->ConfigString, sizeof (ComponentName)/sizeof (CHAR16));
+      StrnCpyS (
+        ComponentName,
+        sizeof (ComponentName) / sizeof (CHAR16),
+        EmuIoThunk->ConfigString,
+        sizeof (ComponentName) / sizeof (CHAR16)
+        );
 
       EmuDevice->DevicePath = EmuBusCreateDevicePath (
                                   ParentDevicePath,
diff --git a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc
index 153da464f1..529adfe1fa 100644
--- a/EmulatorPkg/EmulatorPkg.dsc
+++ b/EmulatorPkg/EmulatorPkg.dsc
@@ -408,10 +408,14 @@ [Components]
 !include NetworkPkg/Network.dsc.inc
 
 [BuildOptions]
+  #
+  # Disable deprecated APIs.
+  #
+  *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
+
   MSFT:DEBUG_*_*_CC_FLAGS = /Od /Oy-
   MSFT:NOOPT_*_*_CC_FLAGS = /Od /Oy-
 
   MSFT:*_*_*_DLINK_FLAGS     = /ALIGN:4096 /FILEALIGN:4096 /SUBSYSTEM:CONSOLE
   MSFT:DEBUG_*_*_DLINK_FLAGS = /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
   MSFT:NOOPT_*_*_DLINK_FLAGS = /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
-
diff --git a/EmulatorPkg/FlashMapPei/FlashMapPei.c b/EmulatorPkg/FlashMapPei/FlashMapPei.c
index 2a468e43ac..7744065dd6 100644
--- a/EmulatorPkg/FlashMapPei/FlashMapPei.c
+++ b/EmulatorPkg/FlashMapPei/FlashMapPei.c
@@ -1,7 +1,7 @@
 /*++ @file
   PEIM to build GUIDed HOBs for platform specific flash map
 
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 Portions copyright (c) 2011, Apple Inc. All rights reserved.
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -69,9 +69,9 @@ Returns:
     return Status;
   }
 
-  PcdSet64 (PcdFlashNvStorageVariableBase64, PcdGet64 (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
-  PcdSet64 (PcdFlashNvStorageFtwWorkingBase64, PcdGet64 (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
-  PcdSet64 (PcdFlashNvStorageFtwSpareBase64, PcdGet64 (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
+  PcdSet64S (PcdFlashNvStorageVariableBase64, PcdGet64 (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
+  PcdSet64S (PcdFlashNvStorageFtwWorkingBase64, PcdGet64 (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
+  PcdSet64S (PcdFlashNvStorageFtwSpareBase64, PcdGet64 (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
 
   return EFI_SUCCESS;
 }
diff --git a/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c b/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
index 331122e200..3acbb23644 100644
--- a/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
+++ b/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
@@ -4,7 +4,7 @@
 
 
 Copyright (c) 2012, Apple Inc. All rights reserved.
-Portitions Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
+Portitions Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 **/
@@ -223,7 +223,7 @@ SmbiosLibUpdateUnicodeString (
   if (Ascii == NULL) {
     return EFI_OUT_OF_RESOURCES;
   }
-  UnicodeStrToAsciiStr (String, Ascii);
+  UnicodeStrToAsciiStrS (String, Ascii, StrSize (String));
 
   StringIndex = StringNumber;
   Status = gSmbios->UpdateString (gSmbios, &SmbiosHandle, &StringIndex, Ascii);
diff --git a/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolList.c b/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolList.c
index b7aacc851c..3a7b6d1ceb 100644
--- a/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolList.c
+++ b/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolList.c
@@ -2,7 +2,7 @@
   Emulator Thunk to abstract OS services from pure EFI code
 
   Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
-  Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.<BR>
 
   SPDX-License-Identifier: BSD-2-Clause-Patent
 
@@ -37,6 +37,7 @@ AddThunkProtocol (
   IN  BOOLEAN                 EmuBusDriver
   )
 {
+  UINTN                       Size;
   CHAR16                      *StartString;
   CHAR16                      *SubString;
   UINTN                       Instance;
@@ -47,8 +48,12 @@ AddThunkProtocol (
   }
 
   Instance = 0;
-  StartString = AllocatePool (StrSize (ConfigString));
-  StrCpy (StartString, ConfigString);
+  Size = StrSize (ConfigString);
+  StartString = AllocatePool (Size);
+  if (StartString == NULL) {
+    return EFI_OUT_OF_RESOURCES;
+  }
+  StrCpyS (StartString, Size / sizeof (CHAR16), ConfigString);
   while (*StartString != '\0') {
 
     //
diff --git a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
index e318a90740..18cb3831a4 100644
--- a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
+++ b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
@@ -4,7 +4,7 @@
 
  Tested on Mac OS X.
 
-Copyright (c) 2004 - 2009, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
 Portitions copyright (c) 2011, Apple Inc. All rights reserved.
 
 SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -1016,7 +1016,11 @@ GetInterfaceMacAddr (
     goto Exit;
   }
 
-  UnicodeStrToAsciiStr (Private->Thunk->ConfigString, Private->InterfaceName);
+  UnicodeStrToAsciiStrS (
+    Private->Thunk->ConfigString,
+    Private->InterfaceName,
+    StrSize (Private->Thunk->ConfigString)
+    );
 
   Status = EFI_NOT_FOUND;
   If = IfAddrs;
diff --git a/EmulatorPkg/Unix/Host/PosixFileSystem.c b/EmulatorPkg/Unix/Host/PosixFileSystem.c
index 6ba3b59d7a..fc217d7a00 100644
--- a/EmulatorPkg/Unix/Host/PosixFileSystem.c
+++ b/EmulatorPkg/Unix/Host/PosixFileSystem.c
@@ -127,7 +127,11 @@ PosixOpenVolume (
   if (PrivateFile->FileName == NULL) {
     goto Done;
   }
-  AsciiStrCpy (PrivateFile->FileName, Private->FilePath);
+  AsciiStrCpyS (
+    PrivateFile->FileName,
+    AsciiStrSize (Private->FilePath),
+    Private->FilePath
+    );
 
   PrivateFile->Signature            = EMU_EFI_FILE_PRIVATE_SIGNATURE;
   PrivateFile->Thunk                = Private->Thunk;
@@ -377,7 +381,7 @@ PosixFileOpen (
   EFI_FILE_INFO                     *Info;
   struct stat                       finfo;
   int                               res;
-
+  UINTN                             Size;
 
   PrivateFile     = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
   PrivateRoot     = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem);
@@ -412,17 +416,18 @@ OpenRoot:
 
   CopyMem (NewPrivateFile, PrivateFile, sizeof (EMU_EFI_FILE_PRIVATE));
 
-  NewPrivateFile->FileName = malloc (AsciiStrSize (PrivateFile->FileName) + 1 + StrLen (FileName) + 1);
+  Size = AsciiStrSize (PrivateFile->FileName) + 1 + StrLen (FileName) + 1;
+  NewPrivateFile->FileName = malloc (Size);
   if (NewPrivateFile->FileName == NULL) {
     goto Done;
   }
 
   if (*FileName == L'\\') {
-    AsciiStrCpy (NewPrivateFile->FileName, PrivateRoot->FilePath);
+    AsciiStrCpyS (NewPrivateFile->FileName, Size, PrivateRoot->FilePath);
     // Skip first '\'.
     Src = FileName + 1;
   } else {
-    AsciiStrCpy (NewPrivateFile->FileName, PrivateFile->FileName);
+    AsciiStrCpyS (NewPrivateFile->FileName, Size, PrivateFile->FileName);
     Src = FileName;
   }
   Dst = NewPrivateFile->FileName + AsciiStrLen (NewPrivateFile->FileName);
@@ -748,7 +753,7 @@ PosixFileRead (
   UINTN                   NameSize;
   UINTN                   ResultSize;
   CHAR8                   *FullFileName;
-
+  UINTN                   FullFileNameSize;
 
   PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
 
@@ -798,15 +803,16 @@ PosixFileRead (
 
   *BufferSize = ResultSize;
 
-  FullFileName = malloc (AsciiStrLen(PrivateFile->FileName) + 1 + NameSize);
+  FullFileNameSize = AsciiStrLen(PrivateFile->FileName) + 1 + NameSize;
+  FullFileName = malloc (FullFileNameSize);
   if (FullFileName == NULL) {
     Status = EFI_OUT_OF_RESOURCES;
     goto Done;
   }
 
-  AsciiStrCpy (FullFileName, PrivateFile->FileName);
-  AsciiStrCat (FullFileName, "/");
-  AsciiStrCat (FullFileName, PrivateFile->Dirent->d_name);
+  AsciiStrCpyS (FullFileName, FullFileNameSize, PrivateFile->FileName);
+  AsciiStrCatS (FullFileName, FullFileNameSize, "/");
+  AsciiStrCatS (FullFileName, FullFileNameSize, PrivateFile->Dirent->d_name);
   Status = UnixSimpleFileSystemFileInfo (
             PrivateFile,
             FullFileName,
@@ -1017,7 +1023,11 @@ PosixFileGetInfo (
     FileSystemInfoBuffer->BlockSize   = buf.f_bsize;
 
 
-    StrCpy ((CHAR16 *) FileSystemInfoBuffer->VolumeLabel, PrivateRoot->VolumeLabel);
+    StrCpyS (
+      (CHAR16 *) FileSystemInfoBuffer->VolumeLabel,
+      (*BufferSize - SIZE_OF_EFI_FILE_SYSTEM_INFO) / sizeof (CHAR16),
+      PrivateRoot->VolumeLabel
+      );
     *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel);
 
   } else if (CompareGuid (InformationType, &gEfiFileSystemVolumeLabelInfoIdGuid)) {
@@ -1026,7 +1036,11 @@ PosixFileGetInfo (
       return EFI_BUFFER_TOO_SMALL;
     }
 
-    StrCpy ((CHAR16 *) Buffer, PrivateRoot->VolumeLabel);
+    StrCpyS (
+      (CHAR16 *) Buffer,
+      *BufferSize / sizeof (CHAR16),
+      PrivateRoot->VolumeLabel
+      );
     *BufferSize = StrSize (PrivateRoot->VolumeLabel);
 
   }
@@ -1082,7 +1096,7 @@ PosixFileSetInfo (
   CHAR16                            *UnicodeFilePtr;
   int                               UnixStatus;
   struct utimbuf                    Utime;
-
+  UINTN                             Size;
 
   PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
   PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS (PrivateFile->SimpleFileSystem);
@@ -1110,7 +1124,11 @@ PosixFileSetInfo (
       goto Done;
     }
 
-    StrCpy (PrivateRoot->VolumeLabel, NewFileSystemInfo->VolumeLabel);
+    StrCpyS (
+      PrivateRoot->VolumeLabel,
+      StrSize (NewFileSystemInfo->VolumeLabel) / sizeof (CHAR16),
+      NewFileSystemInfo->VolumeLabel
+      );
 
     Status = EFI_SUCCESS;
     goto Done;
@@ -1125,7 +1143,11 @@ PosixFileSetInfo (
       goto Done;
     }
 
-    StrCpy (PrivateRoot->VolumeLabel, (CHAR16 *) Buffer);
+    StrCpyS (
+      PrivateRoot->VolumeLabel,
+      StrSize (PrivateRoot->VolumeLabel) / sizeof (CHAR16),
+      (CHAR16 *) Buffer
+      );
 
     Status = EFI_SUCCESS;
     goto Done;
@@ -1183,18 +1205,23 @@ PosixFileSetInfo (
     goto Done;
   }
 
-  AsciiStrCpy (OldFileName, PrivateFile->FileName);
+  AsciiStrCpyS (
+    OldFileName,
+    AsciiStrSize (PrivateFile->FileName),
+    PrivateFile->FileName
+    );
 
   //
   // Make full pathname from new filename and rootpath.
   //
   if (NewFileInfo->FileName[0] == '\\') {
-    NewFileName = malloc (AsciiStrLen (PrivateRoot->FilePath) + 1 + StrLen (NewFileInfo->FileName) + 1);
+    Size = AsciiStrLen (PrivateRoot->FilePath) + 1 + StrLen (NewFileInfo->FileName) + 1;
+    NewFileName = malloc (Size);
     if (NewFileName == NULL) {
       goto Done;
     }
 
-    AsciiStrCpy (NewFileName, PrivateRoot->FilePath);
+    AsciiStrCpyS (NewFileName, Size, PrivateRoot->FilePath);
     AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName);
     UnicodeFilePtr = NewFileInfo->FileName + 1;
     *AsciiFilePtr++ ='/';
@@ -1204,7 +1231,7 @@ PosixFileSetInfo (
       goto Done;
     }
 
-    AsciiStrCpy (NewFileName, PrivateRoot->FilePath);
+    AsciiStrCpyS (NewFileName, Size, PrivateRoot->FilePath);
     AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName);
     if ((AsciiFilePtr[-1] != '/') && (NewFileInfo->FileName[0] != '/')) {
       // make sure there is a / between Root FilePath and NewFileInfo Filename
@@ -1312,7 +1339,11 @@ PosixFileSetInfo (
         goto Done;
       }
 
-      AsciiStrCpy (PrivateFile->FileName, NewFileName);
+      AsciiStrCpyS (
+        PrivateFile->FileName,
+        AsciiStrSize (NewFileName),
+        NewFileName
+        );
     } else {
       Status    = EFI_DEVICE_ERROR;
       goto Done;
@@ -1493,7 +1524,11 @@ PosixFileSystmeThunkOpen (
     free (Private);
     return EFI_OUT_OF_RESOURCES;
   }
-  StrCpy (Private->VolumeLabel, L"EFI_EMULATED");
+  StrCpyS (
+    Private->VolumeLabel,
+    StrSize (L"EFI_EMULATED") / sizeof (CHAR16),
+    L"EFI_EMULATED"
+    );
 
   Private->Signature = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE;
   Private->Thunk     = This;
diff --git a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
index 9d03c13011..5325a0e35b 100644
--- a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
+++ b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
@@ -1,6 +1,6 @@
 /*++ @file
 
-Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
 Portions copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
 
 SPDX-License-Identifier: BSD-2-Clause-Patent
@@ -957,7 +957,7 @@ X11GraphicsWindowOpen (
   XDefineCursor (Drv->display, Drv->win, XCreateFontCursor (Drv->display, XC_pirate));
 
   Drv->Title = malloc (StrSize (This->ConfigString));
-  UnicodeStrToAsciiStr (This->ConfigString, Drv->Title);
+  UnicodeStrToAsciiStrS (This->ConfigString, Drv->Title, StrSize (This->ConfigString));
   XStoreName (Drv->display, Drv->win, Drv->Title);
 
 //  XAutoRepeatOff (Drv->display);
diff --git a/EmulatorPkg/Win/Host/WinFileSystem.c b/EmulatorPkg/Win/Host/WinFileSystem.c
index da6595228d..aab926889e 100644
--- a/EmulatorPkg/Win/Host/WinFileSystem.c
+++ b/EmulatorPkg/Win/Host/WinFileSystem.c
@@ -1,7 +1,7 @@
 /*++ @file
   Support OS native directory access.
 
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
 SPDX-License-Identifier: BSD-2-Clause-Patent
 
 
@@ -205,8 +205,14 @@ WinNtOpenVolume (
     goto Done;
   }
 
-  StrCpy (PrivateFile->FilePath, Private->FilePath);
-  StrCpy (PrivateFile->FileName, PrivateFile->FilePath);
+  StrCpyS (PrivateFile->FilePath,
+    StrSize (Private->FilePath) / sizeof (CHAR16),
+    Private->FilePath
+    );
+  StrCpyS (PrivateFile->FileName,
+    StrSize (Private->FilePath) / sizeof (CHAR16),
+    PrivateFile->FilePath
+    );
   PrivateFile->Signature = WIN_NT_EFI_FILE_PRIVATE_SIGNATURE;
   PrivateFile->Thunk = Private->Thunk;
   PrivateFile->SimpleFileSystem = This;
@@ -243,8 +249,8 @@ WinNtOpenVolume (
   if (TempFileName == NULL) {
     goto Done;
   }
-  StrCpy (TempFileName, PrivateFile->FilePath);
-  StrCat (TempFileName, L"\\*");
+  StrCpyS (TempFileName, Size / sizeof (CHAR16), PrivateFile->FilePath);
+  StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*");
 
   PrivateFile->LHandle = FindFirstFile (TempFileName, &PrivateFile->FindBuf);
   FreePool (TempFileName);
@@ -362,7 +368,7 @@ GetNextFileNameToken (
   } else {
     Offset = SlashPos - *FileName;
     Token = AllocateZeroPool ((Offset + 1) * sizeof (CHAR16));
-    StrnCpy (Token, *FileName, Offset);
+    StrnCpyS (Token, Offset + 1, *FileName, Offset);
     //
     // Point *FileName to the next character after L'\'.
     //
@@ -496,7 +502,7 @@ WinNtFileOpen (
   if (TempFileName == NULL) {
     return EFI_OUT_OF_RESOURCES;
   }
-  StrCpy (TempFileName, FileName);
+  StrCpyS (TempFileName, StrSize (FileName) / sizeof (CHAR16), FileName);
   FileName = TempFileName;
 
   if (FileName[StrLen (FileName) - 1] == L'\\') {
@@ -548,9 +554,17 @@ WinNtFileOpen (
   }
 
   if (PrivateFile->IsDirectoryPath) {
-    StrCpy (NewPrivateFile->FilePath, PrivateFile->FileName);
+    StrCpyS (
+      NewPrivateFile->FilePath,
+      StrSize (PrivateFile->FileName) / sizeof (CHAR16),
+      PrivateFile->FileName
+      );
   } else {
-    StrCpy (NewPrivateFile->FilePath, PrivateFile->FilePath);
+    StrCpyS (
+      NewPrivateFile->FilePath,
+      StrSize (PrivateFile->FileName) / sizeof (CHAR16),
+      PrivateFile->FilePath
+      );
   }
 
   Size = StrSize (NewPrivateFile->FilePath);
@@ -563,17 +577,17 @@ WinNtFileOpen (
   }
 
   if (*FileName == L'\\') {
-    StrCpy (NewPrivateFile->FileName, PrivateRoot->FilePath);
-    StrCat (NewPrivateFile->FileName, L"\\");
-    StrCat (NewPrivateFile->FileName, FileName + 1);
+    StrCpyS (NewPrivateFile->FileName, Size / sizeof (CHAR16), PrivateRoot->FilePath);
+    StrCatS (NewPrivateFile->FileName, Size / sizeof (CHAR16), L"\\");
+    StrCatS (NewPrivateFile->FileName, Size / sizeof (CHAR16), FileName + 1);
   } else {
-    StrCpy (NewPrivateFile->FileName, NewPrivateFile->FilePath);
+    StrCpyS (NewPrivateFile->FileName, Size / sizeof (CHAR16), NewPrivateFile->FilePath);
     if (StrCmp (FileName, L"") != 0) {
       //
       // In case the filename becomes empty, especially after trimming dots and blanks
       //
-      StrCat (NewPrivateFile->FileName, L"\\");
-      StrCat (NewPrivateFile->FileName, FileName);
+      StrCatS (NewPrivateFile->FileName, Size / sizeof (CHAR16), L"\\");
+      StrCatS (NewPrivateFile->FileName, Size / sizeof (CHAR16), FileName);
     }
   }
 
@@ -657,7 +671,11 @@ WinNtFileOpen (
     goto Done;
   }
 
-  StrCpy (NewPrivateFile->FilePath, NewPrivateFile->FileName);
+  StrCpyS (
+    NewPrivateFile->FilePath,
+    StrSize (NewPrivateFile->FileName) / sizeof (CHAR16),
+    NewPrivateFile->FileName
+    );
   if (TempChar != 0) {
     *(RealFileName - 1) = TempChar;
   }
@@ -715,7 +733,7 @@ WinNtFileOpen (
       goto Done;
     }
 
-    StrCpy (TempFileName, NewPrivateFile->FileName);
+    StrCpyS (TempFileName, Size / sizeof (CHAR16), NewPrivateFile->FileName);
 
     if ((OpenMode & EFI_FILE_MODE_CREATE)) {
       //
@@ -769,7 +787,7 @@ WinNtFileOpen (
     //
     // Find the first file under it
     //
-    StrCat (TempFileName, L"\\*");
+    StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*");
     NewPrivateFile->LHandle = FindFirstFile (TempFileName, &NewPrivateFile->FindBuf);
     FreePool (TempFileName);
 
@@ -1330,8 +1348,8 @@ WinNtFileSetPossition (
       goto Done;
     }
 
-    StrCpy (FileName, PrivateFile->FileName);
-    StrCat (FileName, L"\\*");
+    StrCpyS (FileName, Size / sizeof (CHAR16), PrivateFile->FileName);
+    StrCatS (FileName, Size / sizeof (CHAR16), L"\\*");
 
     if (PrivateFile->LHandle != INVALID_HANDLE_VALUE) {
       FindClose (PrivateFile->LHandle);
@@ -1599,7 +1617,11 @@ WinNtFileGetInfo (
       goto Done;
     }
 
-    StrCpy (DriveName, PrivateFile->FilePath);
+    StrCpyS (
+      DriveName,
+      (StrSize (PrivateFile->FilePath) + 1) / sizeof (CHAR16),
+      PrivateFile->FilePath
+      );
     for (Index = 0; DriveName[Index] != 0 && DriveName[Index] != ':'; Index++) {
       ;
     }
@@ -1664,7 +1686,11 @@ WinNtFileGetInfo (
       }
     }
 
-    StrCpy ((CHAR16 *)FileSystemInfoBuffer->VolumeLabel, PrivateRoot->VolumeLabel);
+    StrCpyS (
+      (CHAR16 *)FileSystemInfoBuffer->VolumeLabel,
+      (*BufferSize - SIZE_OF_EFI_FILE_SYSTEM_INFO) / sizeof (CHAR16),
+      PrivateRoot->VolumeLabel
+      );
     *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot->VolumeLabel);
     Status = EFI_SUCCESS;
   }
@@ -1676,7 +1702,11 @@ WinNtFileGetInfo (
       goto Done;
     }
 
-    StrCpy ((CHAR16 *)Buffer, PrivateRoot->VolumeLabel);
+    StrCpyS (
+      (CHAR16 *)Buffer,
+      *BufferSize / sizeof (CHAR16),
+      PrivateRoot->VolumeLabel
+      );
     *BufferSize = StrSize (PrivateRoot->VolumeLabel);
     Status = EFI_SUCCESS;
   }
@@ -1768,7 +1798,11 @@ WinNtFileSetInfo (
       goto Done;
     }
 
-    StrCpy (PrivateRoot->VolumeLabel, NewFileSystemInfo->VolumeLabel);
+    StrCpyS (
+      PrivateRoot->VolumeLabel,
+      StrSize (NewFileSystemInfo->VolumeLabel) / sizeof (CHAR16),
+      NewFileSystemInfo->VolumeLabel
+      );
 
     Status = EFI_SUCCESS;
     goto Done;
@@ -1783,7 +1817,11 @@ WinNtFileSetInfo (
       goto Done;
     }
 
-    StrCpy (PrivateRoot->VolumeLabel, (CHAR16 *)Buffer);
+    StrCpyS (
+      PrivateRoot->VolumeLabel,
+      StrSize (PrivateRoot->VolumeLabel) / sizeof (CHAR16),
+      (CHAR16 *)Buffer
+      );
 
     Status = EFI_SUCCESS;
     goto Done;
@@ -1852,7 +1890,11 @@ WinNtFileSetInfo (
     goto Done;
   }
 
-  StrCpy (OldFileName, PrivateFile->FileName);
+  StrCpyS (
+    OldFileName,
+    StrSize (PrivateFile->FileName) / sizeof (CHAR16),
+    PrivateFile->FileName
+    );
 
   //
   // Make full pathname from new filename and rootpath.
@@ -1867,9 +1909,9 @@ WinNtFileSetInfo (
       goto Done;
     }
 
-    StrCpy (NewFileName, PrivateRoot->FilePath);
-    StrCat (NewFileName, L"\\");
-    StrCat (NewFileName, NewFileInfo->FileName + 1);
+    StrCpyS (NewFileName, Size / sizeof (CHAR16), PrivateRoot->FilePath);
+    StrCatS (NewFileName, Size / sizeof (CHAR16), L"\\");
+    StrCatS (NewFileName, Size / sizeof (CHAR16), NewFileInfo->FileName + 1);
   } else {
     Size = StrSize (PrivateFile->FilePath);
     Size += StrSize (L"\\");
@@ -1880,9 +1922,9 @@ WinNtFileSetInfo (
       goto Done;
     }
 
-    StrCpy (NewFileName, PrivateFile->FilePath);
-    StrCat (NewFileName, L"\\");
-    StrCat (NewFileName, NewFileInfo->FileName);
+    StrCpyS (NewFileName, Size / sizeof (CHAR16), PrivateFile->FilePath);
+    StrCatS (NewFileName, Size / sizeof (CHAR16), L"\\");
+    StrCatS (NewFileName, Size / sizeof (CHAR16), NewFileInfo->FileName);
   }
 
   //
@@ -1990,13 +2032,13 @@ WinNtFileSetInfo (
         goto Done;
       }
 
-      StrCpy (PrivateFile->FileName, NewFileName);
+      StrCpyS (PrivateFile->FileName, StrSize (NewFileName) / sizeof (CHAR16), NewFileName);
 
       Size = StrSize (NewFileName);
       Size += StrSize (L"\\*");
       TempFileName = AllocatePool (Size);
 
-      StrCpy (TempFileName, NewFileName);
+      StrCpyS (TempFileName, Size / sizeof (CHAR16), NewFileName);
 
       if (!PrivateFile->IsDirectoryPath) {
         PrivateFile->LHandle = CreateFile (
@@ -2029,7 +2071,7 @@ WinNtFileSetInfo (
           NULL
         );
 
-        StrCat (TempFileName, L"\\*");
+        StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*");
         PrivateFile->LHandle = FindFirstFile (TempFileName, &FindBuf);
 
         FreePool (TempFileName);
@@ -2048,7 +2090,7 @@ WinNtFileSetInfo (
       Size += StrSize (L"\\*");
       TempFileName = AllocatePool (Size);
 
-      StrCpy (TempFileName, OldFileName);
+      StrCpyS (TempFileName, Size / sizeof (CHAR16), OldFileName);
 
       if (!PrivateFile->IsDirectoryPath) {
         PrivateFile->LHandle = CreateFile (
@@ -2071,7 +2113,7 @@ WinNtFileSetInfo (
           NULL
         );
 
-        StrCat (TempFileName, L"\\*");
+        StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*");
         PrivateFile->LHandle = FindFirstFile (TempFileName, &FindBuf);
       }
 
-- 
2.21.0.windows.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [edk2-devel] [Patch V2 1/3] EmulatorPkg: Fix VS20xx IA32 boot failure
  2019-08-08  2:25 ` [Patch V2 1/3] EmulatorPkg: Fix VS20xx IA32 boot failure Michael D Kinney
@ 2019-08-08  5:54   ` Wu, Hao A
  0 siblings, 0 replies; 8+ messages in thread
From: Wu, Hao A @ 2019-08-08  5:54 UTC (permalink / raw)
  To: devel@edk2.groups.io, Kinney, Michael D
  Cc: Justen, Jordan L, Andrew Fish, Ni, Ray

> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of
> Michael D Kinney
> Sent: Thursday, August 08, 2019 10:26 AM
> To: devel@edk2.groups.io
> Cc: Justen, Jordan L; Andrew Fish; Ni, Ray
> Subject: [edk2-devel] [Patch V2 1/3] EmulatorPkg: Fix VS20xx IA32 boot
> failure
> 
> https://bugzilla.tianocore.org/show_bug.cgi?id=2056
> 
> The IA32 build of the EmulatorPkg for VS20xx does not boot
> because the default value of PCD PcdPeiServicesTablePage
> rarely succeeds to be mapped on IA32 Windows Host Environments.
> Change the DEC default value for this PCD to a value that
> is compatible with Windows and POSIX host environments for
> IA32 and X64.  For IA32 builds, this 64-bit PCD is truncated
> to a 32-bit value.
> 
> PcdPeiServicesTablePage is changed from 0x1003000000 to
> 0x1013000000.  With this new value, no boot failures are
> observed.  However, the use of this hard coded value can
> potentially cause a boot failure if this address specified
> by the PCD is already allocated in the user process.


Thanks for the additional information, the patch is good to me,
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Best Regards,
Hao Wu


> 
> Cc: Jordan Justen <jordan.l.justen@intel.com>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
> ---
>  EmulatorPkg/EmulatorPkg.dec | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/EmulatorPkg/EmulatorPkg.dec b/EmulatorPkg/EmulatorPkg.dec
> index c36f2c4186..99250d9fe5 100644
> --- a/EmulatorPkg/EmulatorPkg.dec
> +++ b/EmulatorPkg/EmulatorPkg.dec
> @@ -2,7 +2,7 @@
>  #
>  # This is the Emu Emulation Environment Platform
>  #
> -# Copyright (c) 2008 - 2011, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>
>  # Portions copyright (c) 2011, Apple Inc. All rights reserved.
>  #
>  #    SPDX-License-Identifier: BSD-2-Clause-Patent
> @@ -66,7 +66,7 @@ [PcdsFixedAtBuild]
>    gEmulatorPkgTokenSpaceGuid.PcdEmuApCount|L"0"|VOID*|0x00001019
> 
>    ## Magic page to implement PEI Services Table Pointer Lib
> -
> gEmulatorPkgTokenSpaceGuid.PcdPeiServicesTablePage|0x1003000000|UIN
> T64|0x0000101b
> +
> gEmulatorPkgTokenSpaceGuid.PcdPeiServicesTablePage|0x1013000000|UIN
> T64|0x0000101b
> 
>    ## Size of the packet filter
> 
> gEmulatorPkgTokenSpaceGuid.PcdNetworkPacketFilterSize|524288|UINT32
> |0x0000101c
> --
> 2.21.0.windows.1
> 
> 
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [edk2-devel] [Patch V2 2/3] EmulatorPkg: Remove UNIX_SEC_BUILD/WIN_SEC_BUILD
  2019-08-08  2:25 ` [Patch V2 2/3] EmulatorPkg: Remove UNIX_SEC_BUILD/WIN_SEC_BUILD Michael D Kinney
@ 2019-08-08  5:55   ` Wu, Hao A
  0 siblings, 0 replies; 8+ messages in thread
From: Wu, Hao A @ 2019-08-08  5:55 UTC (permalink / raw)
  To: devel@edk2.groups.io, Kinney, Michael D
  Cc: Justen, Jordan L, Andrew Fish, Ni, Ray

> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of
> Michael D Kinney
> Sent: Thursday, August 08, 2019 10:26 AM
> To: devel@edk2.groups.io
> Cc: Justen, Jordan L; Andrew Fish; Ni, Ray
> Subject: [edk2-devel] [Patch V2 2/3] EmulatorPkg: Remove
> UNIX_SEC_BUILD/WIN_SEC_BUILD
> 
> https://bugzilla.tianocore.org/show_bug.cgi?id=2055
> 
> Remove the use of the defines UNIX_SEC_BUILD and
> WIN_SEC_BUILD.  This simplifies the build command
> for the EmulatorPkg.  Instead, use !if statements
> in the DSC file using $(ARCH) and $(FAMILY) to
> determine if the build is for a Windows or POSIX
> environment.
> 
> The Readme.md, BAT, and sh files are also updated
> to remove the use of these defines.
> 
> Cc: Jordan Justen <jordan.l.justen@intel.com>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
> ---
>  EmulatorPkg/EmulatorPkg.dsc        | 26 +++++++++++++-------------
>  EmulatorPkg/Readme.md              |  8 ++++----
>  EmulatorPkg/Win/VS2017/BuildVS.bat |  2 +-
>  EmulatorPkg/build.sh               |  8 ++++----
>  4 files changed, 22 insertions(+), 22 deletions(-)
> 
> diff --git a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc
> index ea8b6ce76e..153da464f1 100644
> --- a/EmulatorPkg/EmulatorPkg.dsc
> +++ b/EmulatorPkg/EmulatorPkg.dsc
> @@ -4,7 +4,7 @@
>  # The Emulation Platform can be used to debug individual modules, prior to
> creating
>  # a real platform. This also provides an example for how an DSC is created.
>  #
> -# Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
>  # Portions copyright (c) 2010 - 2011, Apple Inc. All rights reserved.<BR>
>  #
>  # SPDX-License-Identifier: BSD-2-Clause-Patent
> @@ -236,18 +236,18 @@ [PcdsDynamicHii.common.DEFAULT]
> 
> gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlo
> balVariableGuid|0x0|10
> 
>  [Components]
> -!ifdef $(UNIX_SEC_BUILD)
> -  ##
> -  #  Emulator, OS POSIX application
> -  ##
> -  EmulatorPkg/Unix/Host/Host.inf
> -!endif
> -
> -!ifdef $(WIN_SEC_BUILD)
> -  ##
> -  #  Emulator, OS WIN application
> -  ##
> -  EmulatorPkg/Win/Host/WinHost.inf
> +!if "IA32" in $(ARCH) || "X64" in $(ARCH)
> +  !if "MSFT" in $(FAMILY)
> +    ##
> +    #  Emulator, OS WIN application
> +    ##
> +    EmulatorPkg/Win/Host/WinHost.inf
> +  !else
> +    ##
> +    #  Emulator, OS POSIX application
> +    ##
> +    EmulatorPkg/Unix/Host/Host.inf
> +  !endif
>  !endif
> 
>  !ifndef $(SKIP_MAIN_BUILD)
> diff --git a/EmulatorPkg/Readme.md b/EmulatorPkg/Readme.md
> index 461975e859..5ea61ca7ab 100644
> --- a/EmulatorPkg/Readme.md
> +++ b/EmulatorPkg/Readme.md
> @@ -21,19 +21,19 @@
> https://github.com/tianocore/tianocore.github.io/wiki/EmulatorPkg
>  **You can use the following command to build.**
>    * 32bit emulator in Windows:
> 
> -    `build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -D WIN_SEC_BUILD -a
> IA32`
> +    `build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -a IA32`
> 
>    * 64bit emulator in Windows:
> 
> -    `build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -D WIN_SEC_BUILD -a
> X64`
> +    `build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -a X64`
> 
>    * 32bit emulator in Linux:
> 
> -    `build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -D UNIX_SEC_BUILD -a
> IA32`
> +    `build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -a IA32`
> 
>    * 64bit emulator in Linux:
> 
> -    `build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -D UNIX_SEC_BUILD -a
> X64`
> +    `build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -a X64`
> 
>  **You can start/run the emulator using the following command:**
>    * 32bit emulator in Windows:
> diff --git a/EmulatorPkg/Win/VS2017/BuildVS.bat
> b/EmulatorPkg/Win/VS2017/BuildVS.bat
> index 83aebc77dc..6fcf40cc0a 100644
> --- a/EmulatorPkg/Win/VS2017/BuildVS.bat
> +++ b/EmulatorPkg/Win/VS2017/BuildVS.bat
> @@ -1,3 +1,3 @@
>  cd ../../../
>  @call edksetup.bat
> -build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 -D WIN_SEC_BUILD %*
> +build -p EmulatorPkg\EmulatorPkg.dsc -t VS2017 %*
> diff --git a/EmulatorPkg/build.sh b/EmulatorPkg/build.sh
> index 2dab035ed5..60056e1b6c 100755
> --- a/EmulatorPkg/build.sh
> +++ b/EmulatorPkg/build.sh
> @@ -233,13 +233,13 @@ fi
> 
>  case $CLEAN_TYPE in
>    clean)
> -    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b
> $BUILDTARGET -t $HOST_TOOLS -D UNIX_SEC_BUILD -n 3 clean
> +    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b
> $BUILDTARGET -t $HOST_TOOLS -n 3 clean
>      build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b
> $BUILDTARGET -t $TARGET_TOOLS -n 3 clean
>      exit $?
>      ;;
>    cleanall)
>      make -C $WORKSPACE/BaseTools clean
> -    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b
> $BUILDTARGET -t $HOST_TOOLS -D UNIX_SEC_BUILD -n 3 clean
> +    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b
> $BUILDTARGET -t $HOST_TOOLS -n 3 clean
>      build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a $PROCESSOR -b
> $BUILDTARGET -t $TARGET_TOOLS -n 3 clean
>      build -p $WORKSPACE/ShellPkg/ShellPkg.dsc -a IA32 -b $BUILDTARGET -t
> $TARGET_TOOLS -n 3 clean
>      exit $?
> @@ -251,9 +251,9 @@ esac
>  # Build the edk2 EmulatorPkg
>  #
>  if [[ $HOST_TOOLS == $TARGET_TOOLS ]]; then
> -  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a
> $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D BUILD_$ARCH_SIZE -D
> UNIX_SEC_BUILD $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n
> 3
> +  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a
> $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D BUILD_$ARCH_SIZE
> $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n 3
>  else
> -  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a
> $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS  -D BUILD_$ARCH_SIZE -D
> UNIX_SEC_BUILD -D SKIP_MAIN_BUILD -n 3 modules
> +  build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a
> $PROCESSOR -b $BUILDTARGET -t $HOST_TOOLS  -D BUILD_$ARCH_SIZE -D
> SKIP_MAIN_BUILD -n 3 modules


Reviewed-by: Hao A Wu <hao.a.wu@intel.com>

Best Regards,
Hao Wu


>    build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc $BUILD_OPTIONS -a
> $PROCESSOR -b $BUILDTARGET -t $TARGET_TOOLS -D BUILD_$ARCH_SIZE
> $NETWORK_SUPPORT $BUILD_NEW_SHELL $BUILD_FAT -n 3
>    cp
> "$BUILD_OUTPUT_DIR/${BUILDTARGET}_$HOST_TOOLS/$PROCESSOR/Host"
> $BUILD_ROOT_ARCH
>  fi
> --
> 2.21.0.windows.1
> 
> 
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [edk2-devel] [Patch V2 3/3] EmulatorPkg: Add -D DISABLE_NEW_DEPRECATED_INTERFACES
  2019-08-08  2:25 ` [Patch V2 3/3] EmulatorPkg: Add -D DISABLE_NEW_DEPRECATED_INTERFACES Michael D Kinney
@ 2019-08-08  5:56   ` Wu, Hao A
  2019-08-09 21:31     ` Michael D Kinney
  0 siblings, 1 reply; 8+ messages in thread
From: Wu, Hao A @ 2019-08-08  5:56 UTC (permalink / raw)
  To: devel@edk2.groups.io, Kinney, Michael D
  Cc: Justen, Jordan L, Andrew Fish, Ni, Ray

Hello Mike,

With one typo mentioned below addressed,
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>


> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of
> Michael D Kinney
> Sent: Thursday, August 08, 2019 10:26 AM
> To: devel@edk2.groups.io
> Cc: Justen, Jordan L; Andrew Fish; Ni, Ray
> Subject: [edk2-devel] [Patch V2 3/3] EmulatorPkg: Add -D
> DISABLE_NEW_DEPRECATED_INTERFACES
> 
> https://bugzilla.tianocore.org/show_bug.cgi?id=162
> 
> Update EmulatorPkg specific modules and libraries to use
> safe string functions in BaseLib and safe PcdSetxx()
> functions in PcdLib.  With these updates, the define
> DISABLE_NEW_DEPRECATED_INTERFACES is enabled in the DSC
> file.
> 
> Cc: Jordan Justen <jordan.l.justen@intel.com>
> Cc: Andrew Fish <afish@apple.com>
> Cc: Ray Ni <ray.ni@intel.com>
> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
> ---
>  EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c |   9 +-
>  EmulatorPkg/EmulatorPkg.dsc                   |   6 +-
>  EmulatorPkg/FlashMapPei/FlashMapPei.c         |   8 +-
>  EmulatorPkg/Library/SmbiosLib/SmbiosLib.c     |   4 +-
>  .../ThunkProtocolList/ThunkProtocolList.c     |  11 +-
>  EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c  |   8 +-
>  EmulatorPkg/Unix/Host/PosixFileSystem.c       |  77 ++++++++----
>  EmulatorPkg/Unix/Host/X11GraphicsWindow.c     |   4 +-
>  EmulatorPkg/Win/Host/WinFileSystem.c          | 116 ++++++++++++------
>  9 files changed, 169 insertions(+), 74 deletions(-)
> 
> diff --git a/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
> b/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
> index 0bf6e723a1..d8380f2be9 100644
> --- a/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
> +++ b/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
> @@ -1,7 +1,7 @@
>  /** @file
>   Emu Bus driver
> 
> -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
>  Portions copyright (c) 2011, Apple Inc. All rights reserved.
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -256,7 +256,12 @@ EmuBusDriverBindingStart (
> 
>        EmuDevice->ControllerNameTable = NULL;
> 
> -      StrnCpy (ComponentName, EmuIoThunk->ConfigString, sizeof
> (ComponentName)/sizeof (CHAR16));
> +      StrnCpyS (
> +        ComponentName,
> +        sizeof (ComponentName) / sizeof (CHAR16),
> +        EmuIoThunk->ConfigString,
> +        sizeof (ComponentName) / sizeof (CHAR16)
> +        );
> 
>        EmuDevice->DevicePath = EmuBusCreateDevicePath (
>                                    ParentDevicePath,
> diff --git a/EmulatorPkg/EmulatorPkg.dsc b/EmulatorPkg/EmulatorPkg.dsc
> index 153da464f1..529adfe1fa 100644
> --- a/EmulatorPkg/EmulatorPkg.dsc
> +++ b/EmulatorPkg/EmulatorPkg.dsc
> @@ -408,10 +408,14 @@ [Components]
>  !include NetworkPkg/Network.dsc.inc
> 
>  [BuildOptions]
> +  #
> +  # Disable deprecated APIs.
> +  #
> +  *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
> +
>    MSFT:DEBUG_*_*_CC_FLAGS = /Od /Oy-
>    MSFT:NOOPT_*_*_CC_FLAGS = /Od /Oy-
> 
>    MSFT:*_*_*_DLINK_FLAGS     = /ALIGN:4096 /FILEALIGN:4096
> /SUBSYSTEM:CONSOLE
>    MSFT:DEBUG_*_*_DLINK_FLAGS =
> /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
>    MSFT:NOOPT_*_*_DLINK_FLAGS =
> /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /BASE:0x10000
> -
> diff --git a/EmulatorPkg/FlashMapPei/FlashMapPei.c
> b/EmulatorPkg/FlashMapPei/FlashMapPei.c
> index 2a468e43ac..7744065dd6 100644
> --- a/EmulatorPkg/FlashMapPei/FlashMapPei.c
> +++ b/EmulatorPkg/FlashMapPei/FlashMapPei.c
> @@ -1,7 +1,7 @@
>  /*++ @file
>    PEIM to build GUIDed HOBs for platform specific flash map
> 
> -Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
>  Portions copyright (c) 2011, Apple Inc. All rights reserved.
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -69,9 +69,9 @@ Returns:
>      return Status;
>    }
> 
> -  PcdSet64 (PcdFlashNvStorageVariableBase64, PcdGet64
> (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
> -  PcdSet64 (PcdFlashNvStorageFtwWorkingBase64, PcdGet64
> (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
> -  PcdSet64 (PcdFlashNvStorageFtwSpareBase64, PcdGet64
> (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
> +  PcdSet64S (PcdFlashNvStorageVariableBase64, PcdGet64
> (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
> +  PcdSet64S (PcdFlashNvStorageFtwWorkingBase64, PcdGet64
> (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
> +  PcdSet64S (PcdFlashNvStorageFtwSpareBase64, PcdGet64
> (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
> 
>    return EFI_SUCCESS;
>  }
> diff --git a/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
> b/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
> index 331122e200..3acbb23644 100644
> --- a/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
> +++ b/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
> @@ -4,7 +4,7 @@
> 
> 
>  Copyright (c) 2012, Apple Inc. All rights reserved.
> -Portitions Copyright (c) 2006 - 2012, Intel Corporation. All rights
> reserved.<BR>
> +Portitions Copyright (c) 2006 - 2019, Intel Corporation. All rights
> reserved.<BR>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
>  **/
> @@ -223,7 +223,7 @@ SmbiosLibUpdateUnicodeString (
>    if (Ascii == NULL) {
>      return EFI_OUT_OF_RESOURCES;
>    }
> -  UnicodeStrToAsciiStr (String, Ascii);
> +  UnicodeStrToAsciiStrS (String, Ascii, StrSize (String));
> 
>    StringIndex = StringNumber;
>    Status = gSmbios->UpdateString (gSmbios, &SmbiosHandle, &StringIndex,
> Ascii);
> diff --git a/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolList.c
> b/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolList.c
> index b7aacc851c..3a7b6d1ceb 100644
> --- a/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolList.c
> +++ b/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolList.c
> @@ -2,7 +2,7 @@
>    Emulator Thunk to abstract OS services from pure EFI code
> 
>    Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
> -  Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
> +  Copyright (c) 2011 - 2019, Intel Corporation. All rights reserved.<BR>
> 
>    SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> @@ -37,6 +37,7 @@ AddThunkProtocol (
>    IN  BOOLEAN                 EmuBusDriver
>    )
>  {
> +  UINTN                       Size;
>    CHAR16                      *StartString;
>    CHAR16                      *SubString;
>    UINTN                       Instance;
> @@ -47,8 +48,12 @@ AddThunkProtocol (
>    }
> 
>    Instance = 0;
> -  StartString = AllocatePool (StrSize (ConfigString));
> -  StrCpy (StartString, ConfigString);
> +  Size = StrSize (ConfigString);
> +  StartString = AllocatePool (Size);
> +  if (StartString == NULL) {
> +    return EFI_OUT_OF_RESOURCES;
> +  }
> +  StrCpyS (StartString, Size / sizeof (CHAR16), ConfigString);
>    while (*StartString != '\0') {
> 
>      //
> diff --git a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
> b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
> index e318a90740..18cb3831a4 100644
> --- a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
> +++ b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
> @@ -4,7 +4,7 @@
> 
>   Tested on Mac OS X.
> 
> -Copyright (c) 2004 - 2009, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
>  Portitions copyright (c) 2011, Apple Inc. All rights reserved.
> 
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> @@ -1016,7 +1016,11 @@ GetInterfaceMacAddr (
>      goto Exit;
>    }
> 
> -  UnicodeStrToAsciiStr (Private->Thunk->ConfigString, Private-
> >InterfaceName);
> +  UnicodeStrToAsciiStrS (
> +    Private->Thunk->ConfigString,
> +    Private->InterfaceName,
> +    StrSize (Private->Thunk->ConfigString)
> +    );
> 
>    Status = EFI_NOT_FOUND;
>    If = IfAddrs;
> diff --git a/EmulatorPkg/Unix/Host/PosixFileSystem.c
> b/EmulatorPkg/Unix/Host/PosixFileSystem.c
> index 6ba3b59d7a..fc217d7a00 100644
> --- a/EmulatorPkg/Unix/Host/PosixFileSystem.c
> +++ b/EmulatorPkg/Unix/Host/PosixFileSystem.c
> @@ -127,7 +127,11 @@ PosixOpenVolume (
>    if (PrivateFile->FileName == NULL) {
>      goto Done;
>    }
> -  AsciiStrCpy (PrivateFile->FileName, Private->FilePath);
> +  AsciiStrCpyS (
> +    PrivateFile->FileName,
> +    AsciiStrSize (Private->FilePath),
> +    Private->FilePath
> +    );
> 
>    PrivateFile->Signature            = EMU_EFI_FILE_PRIVATE_SIGNATURE;
>    PrivateFile->Thunk                = Private->Thunk;
> @@ -377,7 +381,7 @@ PosixFileOpen (
>    EFI_FILE_INFO                     *Info;
>    struct stat                       finfo;
>    int                               res;
> -
> +  UINTN                             Size;
> 
>    PrivateFile     = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
>    PrivateRoot     = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS
> (PrivateFile->SimpleFileSystem);
> @@ -412,17 +416,18 @@ OpenRoot:
> 
>    CopyMem (NewPrivateFile, PrivateFile, sizeof (EMU_EFI_FILE_PRIVATE));
> 
> -  NewPrivateFile->FileName = malloc (AsciiStrSize (PrivateFile->FileName) +
> 1 + StrLen (FileName) + 1);
> +  Size = AsciiStrSize (PrivateFile->FileName) + 1 + StrLen (FileName) + 1;
> +  NewPrivateFile->FileName = malloc (Size);
>    if (NewPrivateFile->FileName == NULL) {
>      goto Done;
>    }
> 
>    if (*FileName == L'\\') {
> -    AsciiStrCpy (NewPrivateFile->FileName, PrivateRoot->FilePath);
> +    AsciiStrCpyS (NewPrivateFile->FileName, Size, PrivateRoot->FilePath);
>      // Skip first '\'.
>      Src = FileName + 1;
>    } else {
> -    AsciiStrCpy (NewPrivateFile->FileName, PrivateFile->FileName);
> +    AsciiStrCpyS (NewPrivateFile->FileName, Size, PrivateFile->FileName);
>      Src = FileName;
>    }
>    Dst = NewPrivateFile->FileName + AsciiStrLen (NewPrivateFile->FileName);
> @@ -748,7 +753,7 @@ PosixFileRead (
>    UINTN                   NameSize;
>    UINTN                   ResultSize;
>    CHAR8                   *FullFileName;
> -
> +  UINTN                   FullFileNameSize;
> 
>    PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
> 
> @@ -798,15 +803,16 @@ PosixFileRead (
> 
>    *BufferSize = ResultSize;
> 
> -  FullFileName = malloc (AsciiStrLen(PrivateFile->FileName) + 1 + NameSize);
> +  FullFileNameSize = AsciiStrLen(PrivateFile->FileName) + 1 + NameSize;
> +  FullFileName = malloc (FullFileNameSize);
>    if (FullFileName == NULL) {
>      Status = EFI_OUT_OF_RESOURCES;
>      goto Done;
>    }
> 
> -  AsciiStrCpy (FullFileName, PrivateFile->FileName);
> -  AsciiStrCat (FullFileName, "/");
> -  AsciiStrCat (FullFileName, PrivateFile->Dirent->d_name);
> +  AsciiStrCpyS (FullFileName, FullFileNameSize, PrivateFile->FileName);
> +  AsciiStrCatS (FullFileName, FullFileNameSize, "/");
> +  AsciiStrCatS (FullFileName, FullFileNameSize, PrivateFile->Dirent-
> >d_name);
>    Status = UnixSimpleFileSystemFileInfo (
>              PrivateFile,
>              FullFileName,
> @@ -1017,7 +1023,11 @@ PosixFileGetInfo (
>      FileSystemInfoBuffer->BlockSize   = buf.f_bsize;
> 
> 
> -    StrCpy ((CHAR16 *) FileSystemInfoBuffer->VolumeLabel, PrivateRoot-
> >VolumeLabel);
> +    StrCpyS (
> +      (CHAR16 *) FileSystemInfoBuffer->VolumeLabel,
> +      (*BufferSize - SIZE_OF_EFI_FILE_SYSTEM_INFO) / sizeof (CHAR16),
> +      PrivateRoot->VolumeLabel
> +      );
>      *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot-
> >VolumeLabel);
> 
>    } else if (CompareGuid (InformationType,
> &gEfiFileSystemVolumeLabelInfoIdGuid)) {
> @@ -1026,7 +1036,11 @@ PosixFileGetInfo (
>        return EFI_BUFFER_TOO_SMALL;
>      }
> 
> -    StrCpy ((CHAR16 *) Buffer, PrivateRoot->VolumeLabel);
> +    StrCpyS (
> +      (CHAR16 *) Buffer,
> +      *BufferSize / sizeof (CHAR16),
> +      PrivateRoot->VolumeLabel
> +      );
>      *BufferSize = StrSize (PrivateRoot->VolumeLabel);
> 
>    }
> @@ -1082,7 +1096,7 @@ PosixFileSetInfo (
>    CHAR16                            *UnicodeFilePtr;
>    int                               UnixStatus;
>    struct utimbuf                    Utime;
> -
> +  UINTN                             Size;
> 
>    PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
>    PrivateRoot = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS
> (PrivateFile->SimpleFileSystem);
> @@ -1110,7 +1124,11 @@ PosixFileSetInfo (
>        goto Done;
>      }
> 
> -    StrCpy (PrivateRoot->VolumeLabel, NewFileSystemInfo->VolumeLabel);
> +    StrCpyS (
> +      PrivateRoot->VolumeLabel,
> +      StrSize (NewFileSystemInfo->VolumeLabel) / sizeof (CHAR16),
> +      NewFileSystemInfo->VolumeLabel
> +      );
> 
>      Status = EFI_SUCCESS;
>      goto Done;
> @@ -1125,7 +1143,11 @@ PosixFileSetInfo (
>        goto Done;
>      }
> 
> -    StrCpy (PrivateRoot->VolumeLabel, (CHAR16 *) Buffer);
> +    StrCpyS (
> +      PrivateRoot->VolumeLabel,
> +      StrSize (PrivateRoot->VolumeLabel) / sizeof (CHAR16),
> +      (CHAR16 *) Buffer
> +      );
> 
>      Status = EFI_SUCCESS;
>      goto Done;
> @@ -1183,18 +1205,23 @@ PosixFileSetInfo (
>      goto Done;
>    }
> 
> -  AsciiStrCpy (OldFileName, PrivateFile->FileName);
> +  AsciiStrCpyS (
> +    OldFileName,
> +    AsciiStrSize (PrivateFile->FileName),
> +    PrivateFile->FileName
> +    );
> 
>    //
>    // Make full pathname from new filename and rootpath.
>    //
>    if (NewFileInfo->FileName[0] == '\\') {
> -    NewFileName = malloc (AsciiStrLen (PrivateRoot->FilePath) + 1 + StrLen
> (NewFileInfo->FileName) + 1);
> +    Size = AsciiStrLen (PrivateRoot->FilePath) + 1 + StrLen (NewFileInfo-
> >FileName) + 1;
> +    NewFileName = malloc (Size);
>      if (NewFileName == NULL) {
>        goto Done;
>      }
> 
> -    AsciiStrCpy (NewFileName, PrivateRoot->FilePath);
> +    AsciiStrCpyS (NewFileName, Size, PrivateRoot->FilePath);
>      AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName);
>      UnicodeFilePtr = NewFileInfo->FileName + 1;
>      *AsciiFilePtr++ ='/';
> @@ -1204,7 +1231,7 @@ PosixFileSetInfo (
>        goto Done;
>      }
> 
> -    AsciiStrCpy (NewFileName, PrivateRoot->FilePath);
> +    AsciiStrCpyS (NewFileName, Size, PrivateRoot->FilePath);


I think we cannot directly use 'Size' here.

The 'Size' is valid for the "if (NewFileInfo->FileName[0] == '\\') {...}"
chunk, but its value is not right for the "else {...}" block.

Best Regards,
Hao Wu


>      AsciiFilePtr = NewFileName + AsciiStrLen(NewFileName);
>      if ((AsciiFilePtr[-1] != '/') && (NewFileInfo->FileName[0] != '/')) {
>        // make sure there is a / between Root FilePath and NewFileInfo
> Filename
> @@ -1312,7 +1339,11 @@ PosixFileSetInfo (
>          goto Done;
>        }
> 
> -      AsciiStrCpy (PrivateFile->FileName, NewFileName);
> +      AsciiStrCpyS (
> +        PrivateFile->FileName,
> +        AsciiStrSize (NewFileName),
> +        NewFileName
> +        );
>      } else {
>        Status    = EFI_DEVICE_ERROR;
>        goto Done;
> @@ -1493,7 +1524,11 @@ PosixFileSystmeThunkOpen (
>      free (Private);
>      return EFI_OUT_OF_RESOURCES;
>    }
> -  StrCpy (Private->VolumeLabel, L"EFI_EMULATED");
> +  StrCpyS (
> +    Private->VolumeLabel,
> +    StrSize (L"EFI_EMULATED") / sizeof (CHAR16),
> +    L"EFI_EMULATED"
> +    );
> 
>    Private->Signature = EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE;
>    Private->Thunk     = This;
> diff --git a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
> b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
> index 9d03c13011..5325a0e35b 100644
> --- a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
> +++ b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
> @@ -1,6 +1,6 @@
>  /*++ @file
> 
> -Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2004 - 2019, Intel Corporation. All rights reserved.<BR>
>  Portions copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
> 
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> @@ -957,7 +957,7 @@ X11GraphicsWindowOpen (
>    XDefineCursor (Drv->display, Drv->win, XCreateFontCursor (Drv->display,
> XC_pirate));
> 
>    Drv->Title = malloc (StrSize (This->ConfigString));
> -  UnicodeStrToAsciiStr (This->ConfigString, Drv->Title);
> +  UnicodeStrToAsciiStrS (This->ConfigString, Drv->Title, StrSize (This-
> >ConfigString));
>    XStoreName (Drv->display, Drv->win, Drv->Title);
> 
>  //  XAutoRepeatOff (Drv->display);
> diff --git a/EmulatorPkg/Win/Host/WinFileSystem.c
> b/EmulatorPkg/Win/Host/WinFileSystem.c
> index da6595228d..aab926889e 100644
> --- a/EmulatorPkg/Win/Host/WinFileSystem.c
> +++ b/EmulatorPkg/Win/Host/WinFileSystem.c
> @@ -1,7 +1,7 @@
>  /*++ @file
>    Support OS native directory access.
> 
> -Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
> +Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
>  SPDX-License-Identifier: BSD-2-Clause-Patent
> 
> 
> @@ -205,8 +205,14 @@ WinNtOpenVolume (
>      goto Done;
>    }
> 
> -  StrCpy (PrivateFile->FilePath, Private->FilePath);
> -  StrCpy (PrivateFile->FileName, PrivateFile->FilePath);
> +  StrCpyS (PrivateFile->FilePath,
> +    StrSize (Private->FilePath) / sizeof (CHAR16),
> +    Private->FilePath
> +    );
> +  StrCpyS (PrivateFile->FileName,
> +    StrSize (Private->FilePath) / sizeof (CHAR16),
> +    PrivateFile->FilePath
> +    );
>    PrivateFile->Signature = WIN_NT_EFI_FILE_PRIVATE_SIGNATURE;
>    PrivateFile->Thunk = Private->Thunk;
>    PrivateFile->SimpleFileSystem = This;
> @@ -243,8 +249,8 @@ WinNtOpenVolume (
>    if (TempFileName == NULL) {
>      goto Done;
>    }
> -  StrCpy (TempFileName, PrivateFile->FilePath);
> -  StrCat (TempFileName, L"\\*");
> +  StrCpyS (TempFileName, Size / sizeof (CHAR16), PrivateFile->FilePath);
> +  StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*");
> 
>    PrivateFile->LHandle = FindFirstFile (TempFileName, &PrivateFile->FindBuf);
>    FreePool (TempFileName);
> @@ -362,7 +368,7 @@ GetNextFileNameToken (
>    } else {
>      Offset = SlashPos - *FileName;
>      Token = AllocateZeroPool ((Offset + 1) * sizeof (CHAR16));
> -    StrnCpy (Token, *FileName, Offset);
> +    StrnCpyS (Token, Offset + 1, *FileName, Offset);
>      //
>      // Point *FileName to the next character after L'\'.
>      //
> @@ -496,7 +502,7 @@ WinNtFileOpen (
>    if (TempFileName == NULL) {
>      return EFI_OUT_OF_RESOURCES;
>    }
> -  StrCpy (TempFileName, FileName);
> +  StrCpyS (TempFileName, StrSize (FileName) / sizeof (CHAR16), FileName);
>    FileName = TempFileName;
> 
>    if (FileName[StrLen (FileName) - 1] == L'\\') {
> @@ -548,9 +554,17 @@ WinNtFileOpen (
>    }
> 
>    if (PrivateFile->IsDirectoryPath) {
> -    StrCpy (NewPrivateFile->FilePath, PrivateFile->FileName);
> +    StrCpyS (
> +      NewPrivateFile->FilePath,
> +      StrSize (PrivateFile->FileName) / sizeof (CHAR16),
> +      PrivateFile->FileName
> +      );
>    } else {
> -    StrCpy (NewPrivateFile->FilePath, PrivateFile->FilePath);
> +    StrCpyS (
> +      NewPrivateFile->FilePath,
> +      StrSize (PrivateFile->FileName) / sizeof (CHAR16),
> +      PrivateFile->FilePath
> +      );
>    }
> 
>    Size = StrSize (NewPrivateFile->FilePath);
> @@ -563,17 +577,17 @@ WinNtFileOpen (
>    }
> 
>    if (*FileName == L'\\') {
> -    StrCpy (NewPrivateFile->FileName, PrivateRoot->FilePath);
> -    StrCat (NewPrivateFile->FileName, L"\\");
> -    StrCat (NewPrivateFile->FileName, FileName + 1);
> +    StrCpyS (NewPrivateFile->FileName, Size / sizeof (CHAR16), PrivateRoot-
> >FilePath);
> +    StrCatS (NewPrivateFile->FileName, Size / sizeof (CHAR16), L"\\");
> +    StrCatS (NewPrivateFile->FileName, Size / sizeof (CHAR16), FileName + 1);
>    } else {
> -    StrCpy (NewPrivateFile->FileName, NewPrivateFile->FilePath);
> +    StrCpyS (NewPrivateFile->FileName, Size / sizeof (CHAR16),
> NewPrivateFile->FilePath);
>      if (StrCmp (FileName, L"") != 0) {
>        //
>        // In case the filename becomes empty, especially after trimming dots
> and blanks
>        //
> -      StrCat (NewPrivateFile->FileName, L"\\");
> -      StrCat (NewPrivateFile->FileName, FileName);
> +      StrCatS (NewPrivateFile->FileName, Size / sizeof (CHAR16), L"\\");
> +      StrCatS (NewPrivateFile->FileName, Size / sizeof (CHAR16), FileName);
>      }
>    }
> 
> @@ -657,7 +671,11 @@ WinNtFileOpen (
>      goto Done;
>    }
> 
> -  StrCpy (NewPrivateFile->FilePath, NewPrivateFile->FileName);
> +  StrCpyS (
> +    NewPrivateFile->FilePath,
> +    StrSize (NewPrivateFile->FileName) / sizeof (CHAR16),
> +    NewPrivateFile->FileName
> +    );
>    if (TempChar != 0) {
>      *(RealFileName - 1) = TempChar;
>    }
> @@ -715,7 +733,7 @@ WinNtFileOpen (
>        goto Done;
>      }
> 
> -    StrCpy (TempFileName, NewPrivateFile->FileName);
> +    StrCpyS (TempFileName, Size / sizeof (CHAR16), NewPrivateFile-
> >FileName);
> 
>      if ((OpenMode & EFI_FILE_MODE_CREATE)) {
>        //
> @@ -769,7 +787,7 @@ WinNtFileOpen (
>      //
>      // Find the first file under it
>      //
> -    StrCat (TempFileName, L"\\*");
> +    StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*");
>      NewPrivateFile->LHandle = FindFirstFile (TempFileName,
> &NewPrivateFile->FindBuf);
>      FreePool (TempFileName);
> 
> @@ -1330,8 +1348,8 @@ WinNtFileSetPossition (
>        goto Done;
>      }
> 
> -    StrCpy (FileName, PrivateFile->FileName);
> -    StrCat (FileName, L"\\*");
> +    StrCpyS (FileName, Size / sizeof (CHAR16), PrivateFile->FileName);
> +    StrCatS (FileName, Size / sizeof (CHAR16), L"\\*");
> 
>      if (PrivateFile->LHandle != INVALID_HANDLE_VALUE) {
>        FindClose (PrivateFile->LHandle);
> @@ -1599,7 +1617,11 @@ WinNtFileGetInfo (
>        goto Done;
>      }
> 
> -    StrCpy (DriveName, PrivateFile->FilePath);
> +    StrCpyS (
> +      DriveName,
> +      (StrSize (PrivateFile->FilePath) + 1) / sizeof (CHAR16),
> +      PrivateFile->FilePath
> +      );
>      for (Index = 0; DriveName[Index] != 0 && DriveName[Index] != ':';
> Index++) {
>        ;
>      }
> @@ -1664,7 +1686,11 @@ WinNtFileGetInfo (
>        }
>      }
> 
> -    StrCpy ((CHAR16 *)FileSystemInfoBuffer->VolumeLabel, PrivateRoot-
> >VolumeLabel);
> +    StrCpyS (
> +      (CHAR16 *)FileSystemInfoBuffer->VolumeLabel,
> +      (*BufferSize - SIZE_OF_EFI_FILE_SYSTEM_INFO) / sizeof (CHAR16),
> +      PrivateRoot->VolumeLabel
> +      );
>      *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO + StrSize (PrivateRoot-
> >VolumeLabel);
>      Status = EFI_SUCCESS;
>    }
> @@ -1676,7 +1702,11 @@ WinNtFileGetInfo (
>        goto Done;
>      }
> 
> -    StrCpy ((CHAR16 *)Buffer, PrivateRoot->VolumeLabel);
> +    StrCpyS (
> +      (CHAR16 *)Buffer,
> +      *BufferSize / sizeof (CHAR16),
> +      PrivateRoot->VolumeLabel
> +      );
>      *BufferSize = StrSize (PrivateRoot->VolumeLabel);
>      Status = EFI_SUCCESS;
>    }
> @@ -1768,7 +1798,11 @@ WinNtFileSetInfo (
>        goto Done;
>      }
> 
> -    StrCpy (PrivateRoot->VolumeLabel, NewFileSystemInfo->VolumeLabel);
> +    StrCpyS (
> +      PrivateRoot->VolumeLabel,
> +      StrSize (NewFileSystemInfo->VolumeLabel) / sizeof (CHAR16),
> +      NewFileSystemInfo->VolumeLabel
> +      );
> 
>      Status = EFI_SUCCESS;
>      goto Done;
> @@ -1783,7 +1817,11 @@ WinNtFileSetInfo (
>        goto Done;
>      }
> 
> -    StrCpy (PrivateRoot->VolumeLabel, (CHAR16 *)Buffer);
> +    StrCpyS (
> +      PrivateRoot->VolumeLabel,
> +      StrSize (PrivateRoot->VolumeLabel) / sizeof (CHAR16),
> +      (CHAR16 *)Buffer
> +      );
> 
>      Status = EFI_SUCCESS;
>      goto Done;
> @@ -1852,7 +1890,11 @@ WinNtFileSetInfo (
>      goto Done;
>    }
> 
> -  StrCpy (OldFileName, PrivateFile->FileName);
> +  StrCpyS (
> +    OldFileName,
> +    StrSize (PrivateFile->FileName) / sizeof (CHAR16),
> +    PrivateFile->FileName
> +    );
> 
>    //
>    // Make full pathname from new filename and rootpath.
> @@ -1867,9 +1909,9 @@ WinNtFileSetInfo (
>        goto Done;
>      }
> 
> -    StrCpy (NewFileName, PrivateRoot->FilePath);
> -    StrCat (NewFileName, L"\\");
> -    StrCat (NewFileName, NewFileInfo->FileName + 1);
> +    StrCpyS (NewFileName, Size / sizeof (CHAR16), PrivateRoot->FilePath);
> +    StrCatS (NewFileName, Size / sizeof (CHAR16), L"\\");
> +    StrCatS (NewFileName, Size / sizeof (CHAR16), NewFileInfo->FileName +
> 1);
>    } else {
>      Size = StrSize (PrivateFile->FilePath);
>      Size += StrSize (L"\\");
> @@ -1880,9 +1922,9 @@ WinNtFileSetInfo (
>        goto Done;
>      }
> 
> -    StrCpy (NewFileName, PrivateFile->FilePath);
> -    StrCat (NewFileName, L"\\");
> -    StrCat (NewFileName, NewFileInfo->FileName);
> +    StrCpyS (NewFileName, Size / sizeof (CHAR16), PrivateFile->FilePath);
> +    StrCatS (NewFileName, Size / sizeof (CHAR16), L"\\");
> +    StrCatS (NewFileName, Size / sizeof (CHAR16), NewFileInfo->FileName);
>    }
> 
>    //
> @@ -1990,13 +2032,13 @@ WinNtFileSetInfo (
>          goto Done;
>        }
> 
> -      StrCpy (PrivateFile->FileName, NewFileName);
> +      StrCpyS (PrivateFile->FileName, StrSize (NewFileName) / sizeof
> (CHAR16), NewFileName);
> 
>        Size = StrSize (NewFileName);
>        Size += StrSize (L"\\*");
>        TempFileName = AllocatePool (Size);
> 
> -      StrCpy (TempFileName, NewFileName);
> +      StrCpyS (TempFileName, Size / sizeof (CHAR16), NewFileName);
> 
>        if (!PrivateFile->IsDirectoryPath) {
>          PrivateFile->LHandle = CreateFile (
> @@ -2029,7 +2071,7 @@ WinNtFileSetInfo (
>            NULL
>          );
> 
> -        StrCat (TempFileName, L"\\*");
> +        StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*");
>          PrivateFile->LHandle = FindFirstFile (TempFileName, &FindBuf);
> 
>          FreePool (TempFileName);
> @@ -2048,7 +2090,7 @@ WinNtFileSetInfo (
>        Size += StrSize (L"\\*");
>        TempFileName = AllocatePool (Size);
> 
> -      StrCpy (TempFileName, OldFileName);
> +      StrCpyS (TempFileName, Size / sizeof (CHAR16), OldFileName);
> 
>        if (!PrivateFile->IsDirectoryPath) {
>          PrivateFile->LHandle = CreateFile (
> @@ -2071,7 +2113,7 @@ WinNtFileSetInfo (
>            NULL
>          );
> 
> -        StrCat (TempFileName, L"\\*");
> +        StrCatS (TempFileName, Size / sizeof (CHAR16), L"\\*");
>          PrivateFile->LHandle = FindFirstFile (TempFileName, &FindBuf);
>        }
> 
> --
> 2.21.0.windows.1
> 
> 
> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [edk2-devel] [Patch V2 3/3] EmulatorPkg: Add -D DISABLE_NEW_DEPRECATED_INTERFACES
  2019-08-08  5:56   ` [edk2-devel] " Wu, Hao A
@ 2019-08-09 21:31     ` Michael D Kinney
  0 siblings, 0 replies; 8+ messages in thread
From: Michael D Kinney @ 2019-08-09 21:31 UTC (permalink / raw)
  To: Wu, Hao A, devel@edk2.groups.io, Kinney, Michael D
  Cc: Justen, Jordan L, Andrew Fish, Ni, Ray

> -----Original Message-----
> From: Wu, Hao A
> Sent: Wednesday, August 7, 2019 10:56 PM
> To: devel@edk2.groups.io; Kinney, Michael D
> <michael.d.kinney@intel.com>
> Cc: Justen, Jordan L <jordan.l.justen@intel.com>; Andrew
> Fish <afish@apple.com>; Ni, Ray <ray.ni@intel.com>
> Subject: RE: [edk2-devel] [Patch V2 3/3] EmulatorPkg:
> Add -D DISABLE_NEW_DEPRECATED_INTERFACES
> 
> Hello Mike,
> 
> With one typo mentioned below addressed,
> Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
> 
> 
> > -----Original Message-----
> > From: devel@edk2.groups.io
> [mailto:devel@edk2.groups.io] On Behalf Of
> > Michael D Kinney
> > Sent: Thursday, August 08, 2019 10:26 AM
> > To: devel@edk2.groups.io
> > Cc: Justen, Jordan L; Andrew Fish; Ni, Ray
> > Subject: [edk2-devel] [Patch V2 3/3] EmulatorPkg: Add
> -D
> > DISABLE_NEW_DEPRECATED_INTERFACES
> >
> > https://bugzilla.tianocore.org/show_bug.cgi?id=162
> >
> > Update EmulatorPkg specific modules and libraries to
> use safe string
> > functions in BaseLib and safe PcdSetxx() functions in
> PcdLib.  With
> > these updates, the define
> DISABLE_NEW_DEPRECATED_INTERFACES is enabled
> > in the DSC file.
> >
> > Cc: Jordan Justen <jordan.l.justen@intel.com>
> > Cc: Andrew Fish <afish@apple.com>
> > Cc: Ray Ni <ray.ni@intel.com>
> > Signed-off-by: Michael D Kinney
> <michael.d.kinney@intel.com>
> > ---
> >  EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c |   9
> +-
> >  EmulatorPkg/EmulatorPkg.dsc                   |   6
> +-
> >  EmulatorPkg/FlashMapPei/FlashMapPei.c         |   8
> +-
> >  EmulatorPkg/Library/SmbiosLib/SmbiosLib.c     |   4
> +-
> >  .../ThunkProtocolList/ThunkProtocolList.c     |  11
> +-
> >  EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c  |   8
> +-
> >  EmulatorPkg/Unix/Host/PosixFileSystem.c       |  77
> ++++++++----
> >  EmulatorPkg/Unix/Host/X11GraphicsWindow.c     |   4
> +-
> >  EmulatorPkg/Win/Host/WinFileSystem.c          | 116
> ++++++++++++------
> >  9 files changed, 169 insertions(+), 74 deletions(-)
> >
> > diff --git
> a/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
> > b/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
> > index 0bf6e723a1..d8380f2be9 100644
> > --- a/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
> > +++ b/EmulatorPkg/EmuBusDriverDxe/EmuBusDriverDxe.c
> > @@ -1,7 +1,7 @@
> >  /** @file
> >   Emu Bus driver
> >
> > -Copyright (c) 2006 - 2011, Intel Corporation. All
> rights
> > reserved.<BR>
> > +Copyright (c) 2006 - 2019, Intel Corporation. All
> rights
> > +reserved.<BR>
> >  Portions copyright (c) 2011, Apple Inc. All rights
> reserved.
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > @@ -256,7 +256,12 @@ EmuBusDriverBindingStart (
> >
> >        EmuDevice->ControllerNameTable = NULL;
> >
> > -      StrnCpy (ComponentName, EmuIoThunk-
> >ConfigString, sizeof
> > (ComponentName)/sizeof (CHAR16));
> > +      StrnCpyS (
> > +        ComponentName,
> > +        sizeof (ComponentName) / sizeof (CHAR16),
> > +        EmuIoThunk->ConfigString,
> > +        sizeof (ComponentName) / sizeof (CHAR16)
> > +        );
> >
> >        EmuDevice->DevicePath = EmuBusCreateDevicePath
> (
> >                                    ParentDevicePath,
> diff --git
> > a/EmulatorPkg/EmulatorPkg.dsc
> b/EmulatorPkg/EmulatorPkg.dsc index
> > 153da464f1..529adfe1fa 100644
> > --- a/EmulatorPkg/EmulatorPkg.dsc
> > +++ b/EmulatorPkg/EmulatorPkg.dsc
> > @@ -408,10 +408,14 @@ [Components]
> >  !include NetworkPkg/Network.dsc.inc
> >
> >  [BuildOptions]
> > +  #
> > +  # Disable deprecated APIs.
> > +  #
> > +  *_*_*_CC_FLAGS = -D
> DISABLE_NEW_DEPRECATED_INTERFACES
> > +
> >    MSFT:DEBUG_*_*_CC_FLAGS = /Od /Oy-
> >    MSFT:NOOPT_*_*_CC_FLAGS = /Od /Oy-
> >
> >    MSFT:*_*_*_DLINK_FLAGS     = /ALIGN:4096
> /FILEALIGN:4096
> > /SUBSYSTEM:CONSOLE
> >    MSFT:DEBUG_*_*_DLINK_FLAGS =
> > /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT)
> /BASE:0x10000
> >    MSFT:NOOPT_*_*_DLINK_FLAGS =
> > /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT)
> /BASE:0x10000
> > -
> > diff --git a/EmulatorPkg/FlashMapPei/FlashMapPei.c
> > b/EmulatorPkg/FlashMapPei/FlashMapPei.c
> > index 2a468e43ac..7744065dd6 100644
> > --- a/EmulatorPkg/FlashMapPei/FlashMapPei.c
> > +++ b/EmulatorPkg/FlashMapPei/FlashMapPei.c
> > @@ -1,7 +1,7 @@
> >  /*++ @file
> >    PEIM to build GUIDed HOBs for platform specific
> flash map
> >
> > -Copyright (c) 2006 - 2010, Intel Corporation. All
> rights
> > reserved.<BR>
> > +Copyright (c) 2006 - 2019, Intel Corporation. All
> rights
> > +reserved.<BR>
> >  Portions copyright (c) 2011, Apple Inc. All rights
> reserved.
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > @@ -69,9 +69,9 @@ Returns:
> >      return Status;
> >    }
> >
> > -  PcdSet64 (PcdFlashNvStorageVariableBase64, PcdGet64
> > (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
> > -  PcdSet64 (PcdFlashNvStorageFtwWorkingBase64,
> PcdGet64
> > (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
> > -  PcdSet64 (PcdFlashNvStorageFtwSpareBase64, PcdGet64
> > (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
> > +  PcdSet64S (PcdFlashNvStorageVariableBase64,
> PcdGet64
> > (PcdEmuFlashNvStorageVariableBase) + FdFixUp);
> > +  PcdSet64S (PcdFlashNvStorageFtwWorkingBase64,
> PcdGet64
> > (PcdEmuFlashNvStorageFtwWorkingBase) + FdFixUp);
> > +  PcdSet64S (PcdFlashNvStorageFtwSpareBase64,
> PcdGet64
> > (PcdEmuFlashNvStorageFtwSpareBase) + FdFixUp);
> >
> >    return EFI_SUCCESS;
> >  }
> > diff --git a/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
> > b/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
> > index 331122e200..3acbb23644 100644
> > --- a/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
> > +++ b/EmulatorPkg/Library/SmbiosLib/SmbiosLib.c
> > @@ -4,7 +4,7 @@
> >
> >
> >  Copyright (c) 2012, Apple Inc. All rights reserved.
> > -Portitions Copyright (c) 2006 - 2012, Intel
> Corporation. All rights
> > reserved.<BR>
> > +Portitions Copyright (c) 2006 - 2019, Intel
> Corporation. All rights
> > reserved.<BR>
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >  **/
> > @@ -223,7 +223,7 @@ SmbiosLibUpdateUnicodeString (
> >    if (Ascii == NULL) {
> >      return EFI_OUT_OF_RESOURCES;
> >    }
> > -  UnicodeStrToAsciiStr (String, Ascii);
> > +  UnicodeStrToAsciiStrS (String, Ascii, StrSize
> (String));
> >
> >    StringIndex = StringNumber;
> >    Status = gSmbios->UpdateString (gSmbios,
> &SmbiosHandle,
> > &StringIndex, Ascii); diff --git
> >
> a/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolLis
> t.c
> >
> b/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolLis
> t.c
> > index b7aacc851c..3a7b6d1ceb 100644
> > ---
> a/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolLis
> t.c
> > +++
> b/EmulatorPkg/Library/ThunkProtocolList/ThunkProtocolLis
> t.c
> > @@ -2,7 +2,7 @@
> >    Emulator Thunk to abstract OS services from pure
> EFI code
> >
> >    Copyright (c) 2008 - 2011, Apple Inc. All rights
> reserved.<BR>
> > -  Copyright (c) 2011 - 2018, Intel Corporation. All
> rights
> > reserved.<BR>
> > +  Copyright (c) 2011 - 2019, Intel Corporation. All
> rights
> > + reserved.<BR>
> >
> >    SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > @@ -37,6 +37,7 @@ AddThunkProtocol (
> >    IN  BOOLEAN                 EmuBusDriver
> >    )
> >  {
> > +  UINTN                       Size;
> >    CHAR16                      *StartString;
> >    CHAR16                      *SubString;
> >    UINTN                       Instance;
> > @@ -47,8 +48,12 @@ AddThunkProtocol (
> >    }
> >
> >    Instance = 0;
> > -  StartString = AllocatePool (StrSize
> (ConfigString));
> > -  StrCpy (StartString, ConfigString);
> > +  Size = StrSize (ConfigString);
> > +  StartString = AllocatePool (Size);
> > +  if (StartString == NULL) {
> > +    return EFI_OUT_OF_RESOURCES;
> > +  }
> > +  StrCpyS (StartString, Size / sizeof (CHAR16),
> ConfigString);
> >    while (*StartString != '\0') {
> >
> >      //
> > diff --git
> a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
> > b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
> > index e318a90740..18cb3831a4 100644
> > --- a/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
> > +++ b/EmulatorPkg/Unix/Host/BerkeleyPacketFilter.c
> > @@ -4,7 +4,7 @@
> >
> >   Tested on Mac OS X.
> >
> > -Copyright (c) 2004 - 2009, Intel Corporation. All
> rights
> > reserved.<BR>
> > +Copyright (c) 2004 - 2019, Intel Corporation. All
> rights
> > +reserved.<BR>
> >  Portitions copyright (c) 2011, Apple Inc. All rights
> reserved.
> >
> >  SPDX-License-Identifier: BSD-2-Clause-Patent @@ -
> 1016,7 +1016,11 @@
> > GetInterfaceMacAddr (
> >      goto Exit;
> >    }
> >
> > -  UnicodeStrToAsciiStr (Private->Thunk->ConfigString,
> Private-
> > >InterfaceName);
> > +  UnicodeStrToAsciiStrS (
> > +    Private->Thunk->ConfigString,
> > +    Private->InterfaceName,
> > +    StrSize (Private->Thunk->ConfigString)
> > +    );
> >
> >    Status = EFI_NOT_FOUND;
> >    If = IfAddrs;
> > diff --git a/EmulatorPkg/Unix/Host/PosixFileSystem.c
> > b/EmulatorPkg/Unix/Host/PosixFileSystem.c
> > index 6ba3b59d7a..fc217d7a00 100644
> > --- a/EmulatorPkg/Unix/Host/PosixFileSystem.c
> > +++ b/EmulatorPkg/Unix/Host/PosixFileSystem.c
> > @@ -127,7 +127,11 @@ PosixOpenVolume (
> >    if (PrivateFile->FileName == NULL) {
> >      goto Done;
> >    }
> > -  AsciiStrCpy (PrivateFile->FileName, Private-
> >FilePath);
> > +  AsciiStrCpyS (
> > +    PrivateFile->FileName,
> > +    AsciiStrSize (Private->FilePath),
> > +    Private->FilePath
> > +    );
> >
> >    PrivateFile->Signature            =
> EMU_EFI_FILE_PRIVATE_SIGNATURE;
> >    PrivateFile->Thunk                = Private->Thunk;
> > @@ -377,7 +381,7 @@ PosixFileOpen (
> >    EFI_FILE_INFO                     *Info;
> >    struct stat                       finfo;
> >    int                               res;
> > -
> > +  UINTN                             Size;
> >
> >    PrivateFile     =
> EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS (This);
> >    PrivateRoot     =
> EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS
> > (PrivateFile->SimpleFileSystem);
> > @@ -412,17 +416,18 @@ OpenRoot:
> >
> >    CopyMem (NewPrivateFile, PrivateFile, sizeof
> > (EMU_EFI_FILE_PRIVATE));
> >
> > -  NewPrivateFile->FileName = malloc (AsciiStrSize
> > (PrivateFile->FileName) +
> > 1 + StrLen (FileName) + 1);
> > +  Size = AsciiStrSize (PrivateFile->FileName) + 1 +
> StrLen (FileName)
> > + + 1;  NewPrivateFile->FileName = malloc (Size);
> >    if (NewPrivateFile->FileName == NULL) {
> >      goto Done;
> >    }
> >
> >    if (*FileName == L'\\') {
> > -    AsciiStrCpy (NewPrivateFile->FileName,
> PrivateRoot->FilePath);
> > +    AsciiStrCpyS (NewPrivateFile->FileName, Size,
> > + PrivateRoot->FilePath);
> >      // Skip first '\'.
> >      Src = FileName + 1;
> >    } else {
> > -    AsciiStrCpy (NewPrivateFile->FileName,
> PrivateFile->FileName);
> > +    AsciiStrCpyS (NewPrivateFile->FileName, Size,
> > + PrivateFile->FileName);
> >      Src = FileName;
> >    }
> >    Dst = NewPrivateFile->FileName + AsciiStrLen
> > (NewPrivateFile->FileName); @@ -748,7 +753,7 @@
> PosixFileRead (
> >    UINTN                   NameSize;
> >    UINTN                   ResultSize;
> >    CHAR8                   *FullFileName;
> > -
> > +  UINTN                   FullFileNameSize;
> >
> >    PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS
> (This);
> >
> > @@ -798,15 +803,16 @@ PosixFileRead (
> >
> >    *BufferSize = ResultSize;
> >
> > -  FullFileName = malloc (AsciiStrLen(PrivateFile-
> >FileName) + 1 +
> > NameSize);
> > +  FullFileNameSize = AsciiStrLen(PrivateFile-
> >FileName) + 1 +
> > + NameSize;  FullFileName = malloc (FullFileNameSize);
> >    if (FullFileName == NULL) {
> >      Status = EFI_OUT_OF_RESOURCES;
> >      goto Done;
> >    }
> >
> > -  AsciiStrCpy (FullFileName, PrivateFile->FileName);
> > -  AsciiStrCat (FullFileName, "/");
> > -  AsciiStrCat (FullFileName, PrivateFile->Dirent-
> >d_name);
> > +  AsciiStrCpyS (FullFileName, FullFileNameSize,
> > + PrivateFile->FileName);  AsciiStrCatS (FullFileName,
> > + FullFileNameSize, "/");  AsciiStrCatS (FullFileName,
> > + FullFileNameSize, PrivateFile->Dirent-
> > >d_name);
> >    Status = UnixSimpleFileSystemFileInfo (
> >              PrivateFile,
> >              FullFileName,
> > @@ -1017,7 +1023,11 @@ PosixFileGetInfo (
> >      FileSystemInfoBuffer->BlockSize   = buf.f_bsize;
> >
> >
> > -    StrCpy ((CHAR16 *) FileSystemInfoBuffer-
> >VolumeLabel, PrivateRoot-
> > >VolumeLabel);
> > +    StrCpyS (
> > +      (CHAR16 *) FileSystemInfoBuffer->VolumeLabel,
> > +      (*BufferSize - SIZE_OF_EFI_FILE_SYSTEM_INFO) /
> sizeof (CHAR16),
> > +      PrivateRoot->VolumeLabel
> > +      );
> >      *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO +
> StrSize
> > (PrivateRoot-
> > >VolumeLabel);
> >
> >    } else if (CompareGuid (InformationType,
> > &gEfiFileSystemVolumeLabelInfoIdGuid)) { @@ -1026,7
> +1036,11 @@
> > PosixFileGetInfo (
> >        return EFI_BUFFER_TOO_SMALL;
> >      }
> >
> > -    StrCpy ((CHAR16 *) Buffer, PrivateRoot-
> >VolumeLabel);
> > +    StrCpyS (
> > +      (CHAR16 *) Buffer,
> > +      *BufferSize / sizeof (CHAR16),
> > +      PrivateRoot->VolumeLabel
> > +      );
> >      *BufferSize = StrSize (PrivateRoot->VolumeLabel);
> >
> >    }
> > @@ -1082,7 +1096,7 @@ PosixFileSetInfo (
> >    CHAR16                            *UnicodeFilePtr;
> >    int                               UnixStatus;
> >    struct utimbuf                    Utime;
> > -
> > +  UINTN                             Size;
> >
> >    PrivateFile = EMU_EFI_FILE_PRIVATE_DATA_FROM_THIS
> (This);
> >    PrivateRoot =
> EMU_SIMPLE_FILE_SYSTEM_PRIVATE_DATA_FROM_THIS
> > (PrivateFile->SimpleFileSystem);
> > @@ -1110,7 +1124,11 @@ PosixFileSetInfo (
> >        goto Done;
> >      }
> >
> > -    StrCpy (PrivateRoot->VolumeLabel,
> NewFileSystemInfo->VolumeLabel);
> > +    StrCpyS (
> > +      PrivateRoot->VolumeLabel,
> > +      StrSize (NewFileSystemInfo->VolumeLabel) /
> sizeof (CHAR16),
> > +      NewFileSystemInfo->VolumeLabel
> > +      );
> >
> >      Status = EFI_SUCCESS;
> >      goto Done;
> > @@ -1125,7 +1143,11 @@ PosixFileSetInfo (
> >        goto Done;
> >      }
> >
> > -    StrCpy (PrivateRoot->VolumeLabel, (CHAR16 *)
> Buffer);
> > +    StrCpyS (
> > +      PrivateRoot->VolumeLabel,
> > +      StrSize (PrivateRoot->VolumeLabel) / sizeof
> (CHAR16),
> > +      (CHAR16 *) Buffer
> > +      );
> >
> >      Status = EFI_SUCCESS;
> >      goto Done;
> > @@ -1183,18 +1205,23 @@ PosixFileSetInfo (
> >      goto Done;
> >    }
> >
> > -  AsciiStrCpy (OldFileName, PrivateFile->FileName);
> > +  AsciiStrCpyS (
> > +    OldFileName,
> > +    AsciiStrSize (PrivateFile->FileName),
> > +    PrivateFile->FileName
> > +    );
> >
> >    //
> >    // Make full pathname from new filename and
> rootpath.
> >    //
> >    if (NewFileInfo->FileName[0] == '\\') {
> > -    NewFileName = malloc (AsciiStrLen (PrivateRoot-
> >FilePath) + 1 + StrLen
> > (NewFileInfo->FileName) + 1);
> > +    Size = AsciiStrLen (PrivateRoot->FilePath) + 1 +
> StrLen
> > + (NewFileInfo-
> > >FileName) + 1;
> > +    NewFileName = malloc (Size);
> >      if (NewFileName == NULL) {
> >        goto Done;
> >      }
> >
> > -    AsciiStrCpy (NewFileName, PrivateRoot->FilePath);
> > +    AsciiStrCpyS (NewFileName, Size, PrivateRoot-
> >FilePath);
> >      AsciiFilePtr = NewFileName +
> AsciiStrLen(NewFileName);
> >      UnicodeFilePtr = NewFileInfo->FileName + 1;
> >      *AsciiFilePtr++ ='/';
> > @@ -1204,7 +1231,7 @@ PosixFileSetInfo (
> >        goto Done;
> >      }
> >
> > -    AsciiStrCpy (NewFileName, PrivateRoot->FilePath);
> > +    AsciiStrCpyS (NewFileName, Size, PrivateRoot-
> >FilePath);
> 
> 
> I think we cannot directly use 'Size' here.
> 
> The 'Size' is valid for the "if (NewFileInfo-
> >FileName[0] == '\\') {...}"
> chunk, but its value is not right for the "else {...}"
> block.
> 
> Best Regards,
> Hao Wu

Thanks for catching this case.  I have updated code to
compute Size variable in both the 'if' and 'else' clauses.

Best regards,

Mike

> 
> 
> >      AsciiFilePtr = NewFileName +
> AsciiStrLen(NewFileName);
> >      if ((AsciiFilePtr[-1] != '/') && (NewFileInfo-
> >FileName[0] != '/')) {
> >        // make sure there is a / between Root FilePath
> and NewFileInfo
> > Filename @@ -1312,7 +1339,11 @@ PosixFileSetInfo (
> >          goto Done;
> >        }
> >
> > -      AsciiStrCpy (PrivateFile->FileName,
> NewFileName);
> > +      AsciiStrCpyS (
> > +        PrivateFile->FileName,
> > +        AsciiStrSize (NewFileName),
> > +        NewFileName
> > +        );
> >      } else {
> >        Status    = EFI_DEVICE_ERROR;
> >        goto Done;
> > @@ -1493,7 +1524,11 @@ PosixFileSystmeThunkOpen (
> >      free (Private);
> >      return EFI_OUT_OF_RESOURCES;
> >    }
> > -  StrCpy (Private->VolumeLabel, L"EFI_EMULATED");
> > +  StrCpyS (
> > +    Private->VolumeLabel,
> > +    StrSize (L"EFI_EMULATED") / sizeof (CHAR16),
> > +    L"EFI_EMULATED"
> > +    );
> >
> >    Private->Signature =
> EMU_SIMPLE_FILE_SYSTEM_PRIVATE_SIGNATURE;
> >    Private->Thunk     = This;
> > diff --git a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
> > b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
> > index 9d03c13011..5325a0e35b 100644
> > --- a/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
> > +++ b/EmulatorPkg/Unix/Host/X11GraphicsWindow.c
> > @@ -1,6 +1,6 @@
> >  /*++ @file
> >
> > -Copyright (c) 2004 - 2011, Intel Corporation. All
> rights
> > reserved.<BR>
> > +Copyright (c) 2004 - 2019, Intel Corporation. All
> rights
> > +reserved.<BR>
> >  Portions copyright (c) 2008 - 2011, Apple Inc. All
> rights
> > reserved.<BR>
> >
> >  SPDX-License-Identifier: BSD-2-Clause-Patent @@ -
> 957,7 +957,7 @@
> > X11GraphicsWindowOpen (
> >    XDefineCursor (Drv->display, Drv->win,
> XCreateFontCursor
> > (Drv->display, XC_pirate));
> >
> >    Drv->Title = malloc (StrSize (This->ConfigString));
> > -  UnicodeStrToAsciiStr (This->ConfigString, Drv-
> >Title);
> > +  UnicodeStrToAsciiStrS (This->ConfigString, Drv-
> >Title, StrSize
> > + (This-
> > >ConfigString));
> >    XStoreName (Drv->display, Drv->win, Drv->Title);
> >
> >  //  XAutoRepeatOff (Drv->display);
> > diff --git a/EmulatorPkg/Win/Host/WinFileSystem.c
> > b/EmulatorPkg/Win/Host/WinFileSystem.c
> > index da6595228d..aab926889e 100644
> > --- a/EmulatorPkg/Win/Host/WinFileSystem.c
> > +++ b/EmulatorPkg/Win/Host/WinFileSystem.c
> > @@ -1,7 +1,7 @@
> >  /*++ @file
> >    Support OS native directory access.
> >
> > -Copyright (c) 2006 - 2018, Intel Corporation. All
> rights
> > reserved.<BR>
> > +Copyright (c) 2006 - 2019, Intel Corporation. All
> rights
> > +reserved.<BR>
> >  SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> >
> > @@ -205,8 +205,14 @@ WinNtOpenVolume (
> >      goto Done;
> >    }
> >
> > -  StrCpy (PrivateFile->FilePath, Private->FilePath);
> > -  StrCpy (PrivateFile->FileName, PrivateFile-
> >FilePath);
> > +  StrCpyS (PrivateFile->FilePath,
> > +    StrSize (Private->FilePath) / sizeof (CHAR16),
> > +    Private->FilePath
> > +    );
> > +  StrCpyS (PrivateFile->FileName,
> > +    StrSize (Private->FilePath) / sizeof (CHAR16),
> > +    PrivateFile->FilePath
> > +    );
> >    PrivateFile->Signature =
> WIN_NT_EFI_FILE_PRIVATE_SIGNATURE;
> >    PrivateFile->Thunk = Private->Thunk;
> >    PrivateFile->SimpleFileSystem = This; @@ -243,8
> +249,8 @@
> > WinNtOpenVolume (
> >    if (TempFileName == NULL) {
> >      goto Done;
> >    }
> > -  StrCpy (TempFileName, PrivateFile->FilePath);
> > -  StrCat (TempFileName, L"\\*");
> > +  StrCpyS (TempFileName, Size / sizeof (CHAR16),
> > + PrivateFile->FilePath);  StrCatS (TempFileName, Size
> / sizeof
> > + (CHAR16), L"\\*");
> >
> >    PrivateFile->LHandle = FindFirstFile (TempFileName,
> &PrivateFile->FindBuf);
> >    FreePool (TempFileName);
> > @@ -362,7 +368,7 @@ GetNextFileNameToken (
> >    } else {
> >      Offset = SlashPos - *FileName;
> >      Token = AllocateZeroPool ((Offset + 1) * sizeof
> (CHAR16));
> > -    StrnCpy (Token, *FileName, Offset);
> > +    StrnCpyS (Token, Offset + 1, *FileName, Offset);
> >      //
> >      // Point *FileName to the next character after
> L'\'.
> >      //
> > @@ -496,7 +502,7 @@ WinNtFileOpen (
> >    if (TempFileName == NULL) {
> >      return EFI_OUT_OF_RESOURCES;
> >    }
> > -  StrCpy (TempFileName, FileName);
> > +  StrCpyS (TempFileName, StrSize (FileName) / sizeof
> (CHAR16),
> > + FileName);
> >    FileName = TempFileName;
> >
> >    if (FileName[StrLen (FileName) - 1] == L'\\') { @@
> -548,9 +554,17
> > @@ WinNtFileOpen (
> >    }
> >
> >    if (PrivateFile->IsDirectoryPath) {
> > -    StrCpy (NewPrivateFile->FilePath, PrivateFile-
> >FileName);
> > +    StrCpyS (
> > +      NewPrivateFile->FilePath,
> > +      StrSize (PrivateFile->FileName) / sizeof
> (CHAR16),
> > +      PrivateFile->FileName
> > +      );
> >    } else {
> > -    StrCpy (NewPrivateFile->FilePath, PrivateFile-
> >FilePath);
> > +    StrCpyS (
> > +      NewPrivateFile->FilePath,
> > +      StrSize (PrivateFile->FileName) / sizeof
> (CHAR16),
> > +      PrivateFile->FilePath
> > +      );
> >    }
> >
> >    Size = StrSize (NewPrivateFile->FilePath); @@ -
> 563,17 +577,17 @@
> > WinNtFileOpen (
> >    }
> >
> >    if (*FileName == L'\\') {
> > -    StrCpy (NewPrivateFile->FileName, PrivateRoot-
> >FilePath);
> > -    StrCat (NewPrivateFile->FileName, L"\\");
> > -    StrCat (NewPrivateFile->FileName, FileName + 1);
> > +    StrCpyS (NewPrivateFile->FileName, Size / sizeof
> (CHAR16),
> > + PrivateRoot-
> > >FilePath);
> > +    StrCatS (NewPrivateFile->FileName, Size / sizeof
> (CHAR16), L"\\");
> > +    StrCatS (NewPrivateFile->FileName, Size / sizeof
> (CHAR16),
> > + FileName + 1);
> >    } else {
> > -    StrCpy (NewPrivateFile->FileName, NewPrivateFile-
> >FilePath);
> > +    StrCpyS (NewPrivateFile->FileName, Size / sizeof
> (CHAR16),
> > NewPrivateFile->FilePath);
> >      if (StrCmp (FileName, L"") != 0) {
> >        //
> >        // In case the filename becomes empty,
> especially after
> > trimming dots and blanks
> >        //
> > -      StrCat (NewPrivateFile->FileName, L"\\");
> > -      StrCat (NewPrivateFile->FileName, FileName);
> > +      StrCatS (NewPrivateFile->FileName, Size /
> sizeof (CHAR16), L"\\");
> > +      StrCatS (NewPrivateFile->FileName, Size /
> sizeof (CHAR16),
> > + FileName);
> >      }
> >    }
> >
> > @@ -657,7 +671,11 @@ WinNtFileOpen (
> >      goto Done;
> >    }
> >
> > -  StrCpy (NewPrivateFile->FilePath, NewPrivateFile-
> >FileName);
> > +  StrCpyS (
> > +    NewPrivateFile->FilePath,
> > +    StrSize (NewPrivateFile->FileName) / sizeof
> (CHAR16),
> > +    NewPrivateFile->FileName
> > +    );
> >    if (TempChar != 0) {
> >      *(RealFileName - 1) = TempChar;
> >    }
> > @@ -715,7 +733,7 @@ WinNtFileOpen (
> >        goto Done;
> >      }
> >
> > -    StrCpy (TempFileName, NewPrivateFile->FileName);
> > +    StrCpyS (TempFileName, Size / sizeof (CHAR16),
> NewPrivateFile-
> > >FileName);
> >
> >      if ((OpenMode & EFI_FILE_MODE_CREATE)) {
> >        //
> > @@ -769,7 +787,7 @@ WinNtFileOpen (
> >      //
> >      // Find the first file under it
> >      //
> > -    StrCat (TempFileName, L"\\*");
> > +    StrCatS (TempFileName, Size / sizeof (CHAR16),
> L"\\*");
> >      NewPrivateFile->LHandle = FindFirstFile
> (TempFileName,
> > &NewPrivateFile->FindBuf);
> >      FreePool (TempFileName);
> >
> > @@ -1330,8 +1348,8 @@ WinNtFileSetPossition (
> >        goto Done;
> >      }
> >
> > -    StrCpy (FileName, PrivateFile->FileName);
> > -    StrCat (FileName, L"\\*");
> > +    StrCpyS (FileName, Size / sizeof (CHAR16),
> PrivateFile->FileName);
> > +    StrCatS (FileName, Size / sizeof (CHAR16),
> L"\\*");
> >
> >      if (PrivateFile->LHandle != INVALID_HANDLE_VALUE)
> {
> >        FindClose (PrivateFile->LHandle); @@ -1599,7
> +1617,11 @@
> > WinNtFileGetInfo (
> >        goto Done;
> >      }
> >
> > -    StrCpy (DriveName, PrivateFile->FilePath);
> > +    StrCpyS (
> > +      DriveName,
> > +      (StrSize (PrivateFile->FilePath) + 1) / sizeof
> (CHAR16),
> > +      PrivateFile->FilePath
> > +      );
> >      for (Index = 0; DriveName[Index] != 0 &&
> DriveName[Index] != ':';
> > Index++) {
> >        ;
> >      }
> > @@ -1664,7 +1686,11 @@ WinNtFileGetInfo (
> >        }
> >      }
> >
> > -    StrCpy ((CHAR16 *)FileSystemInfoBuffer-
> >VolumeLabel, PrivateRoot-
> > >VolumeLabel);
> > +    StrCpyS (
> > +      (CHAR16 *)FileSystemInfoBuffer->VolumeLabel,
> > +      (*BufferSize - SIZE_OF_EFI_FILE_SYSTEM_INFO) /
> sizeof (CHAR16),
> > +      PrivateRoot->VolumeLabel
> > +      );
> >      *BufferSize = SIZE_OF_EFI_FILE_SYSTEM_INFO +
> StrSize
> > (PrivateRoot-
> > >VolumeLabel);
> >      Status = EFI_SUCCESS;
> >    }
> > @@ -1676,7 +1702,11 @@ WinNtFileGetInfo (
> >        goto Done;
> >      }
> >
> > -    StrCpy ((CHAR16 *)Buffer, PrivateRoot-
> >VolumeLabel);
> > +    StrCpyS (
> > +      (CHAR16 *)Buffer,
> > +      *BufferSize / sizeof (CHAR16),
> > +      PrivateRoot->VolumeLabel
> > +      );
> >      *BufferSize = StrSize (PrivateRoot->VolumeLabel);
> >      Status = EFI_SUCCESS;
> >    }
> > @@ -1768,7 +1798,11 @@ WinNtFileSetInfo (
> >        goto Done;
> >      }
> >
> > -    StrCpy (PrivateRoot->VolumeLabel,
> NewFileSystemInfo->VolumeLabel);
> > +    StrCpyS (
> > +      PrivateRoot->VolumeLabel,
> > +      StrSize (NewFileSystemInfo->VolumeLabel) /
> sizeof (CHAR16),
> > +      NewFileSystemInfo->VolumeLabel
> > +      );
> >
> >      Status = EFI_SUCCESS;
> >      goto Done;
> > @@ -1783,7 +1817,11 @@ WinNtFileSetInfo (
> >        goto Done;
> >      }
> >
> > -    StrCpy (PrivateRoot->VolumeLabel, (CHAR16
> *)Buffer);
> > +    StrCpyS (
> > +      PrivateRoot->VolumeLabel,
> > +      StrSize (PrivateRoot->VolumeLabel) / sizeof
> (CHAR16),
> > +      (CHAR16 *)Buffer
> > +      );
> >
> >      Status = EFI_SUCCESS;
> >      goto Done;
> > @@ -1852,7 +1890,11 @@ WinNtFileSetInfo (
> >      goto Done;
> >    }
> >
> > -  StrCpy (OldFileName, PrivateFile->FileName);
> > +  StrCpyS (
> > +    OldFileName,
> > +    StrSize (PrivateFile->FileName) / sizeof
> (CHAR16),
> > +    PrivateFile->FileName
> > +    );
> >
> >    //
> >    // Make full pathname from new filename and
> rootpath.
> > @@ -1867,9 +1909,9 @@ WinNtFileSetInfo (
> >        goto Done;
> >      }
> >
> > -    StrCpy (NewFileName, PrivateRoot->FilePath);
> > -    StrCat (NewFileName, L"\\");
> > -    StrCat (NewFileName, NewFileInfo->FileName + 1);
> > +    StrCpyS (NewFileName, Size / sizeof (CHAR16),
> PrivateRoot->FilePath);
> > +    StrCatS (NewFileName, Size / sizeof (CHAR16),
> L"\\");
> > +    StrCatS (NewFileName, Size / sizeof (CHAR16),
> > + NewFileInfo->FileName +
> > 1);
> >    } else {
> >      Size = StrSize (PrivateFile->FilePath);
> >      Size += StrSize (L"\\");
> > @@ -1880,9 +1922,9 @@ WinNtFileSetInfo (
> >        goto Done;
> >      }
> >
> > -    StrCpy (NewFileName, PrivateFile->FilePath);
> > -    StrCat (NewFileName, L"\\");
> > -    StrCat (NewFileName, NewFileInfo->FileName);
> > +    StrCpyS (NewFileName, Size / sizeof (CHAR16),
> PrivateFile->FilePath);
> > +    StrCatS (NewFileName, Size / sizeof (CHAR16),
> L"\\");
> > +    StrCatS (NewFileName, Size / sizeof (CHAR16),
> > + NewFileInfo->FileName);
> >    }
> >
> >    //
> > @@ -1990,13 +2032,13 @@ WinNtFileSetInfo (
> >          goto Done;
> >        }
> >
> > -      StrCpy (PrivateFile->FileName, NewFileName);
> > +      StrCpyS (PrivateFile->FileName, StrSize
> (NewFileName) / sizeof
> > (CHAR16), NewFileName);
> >
> >        Size = StrSize (NewFileName);
> >        Size += StrSize (L"\\*");
> >        TempFileName = AllocatePool (Size);
> >
> > -      StrCpy (TempFileName, NewFileName);
> > +      StrCpyS (TempFileName, Size / sizeof (CHAR16),
> NewFileName);
> >
> >        if (!PrivateFile->IsDirectoryPath) {
> >          PrivateFile->LHandle = CreateFile ( @@ -
> 2029,7 +2071,7 @@
> > WinNtFileSetInfo (
> >            NULL
> >          );
> >
> > -        StrCat (TempFileName, L"\\*");
> > +        StrCatS (TempFileName, Size / sizeof
> (CHAR16), L"\\*");
> >          PrivateFile->LHandle = FindFirstFile
> (TempFileName,
> > &FindBuf);
> >
> >          FreePool (TempFileName);
> > @@ -2048,7 +2090,7 @@ WinNtFileSetInfo (
> >        Size += StrSize (L"\\*");
> >        TempFileName = AllocatePool (Size);
> >
> > -      StrCpy (TempFileName, OldFileName);
> > +      StrCpyS (TempFileName, Size / sizeof (CHAR16),
> OldFileName);
> >
> >        if (!PrivateFile->IsDirectoryPath) {
> >          PrivateFile->LHandle = CreateFile ( @@ -
> 2071,7 +2113,7 @@
> > WinNtFileSetInfo (
> >            NULL
> >          );
> >
> > -        StrCat (TempFileName, L"\\*");
> > +        StrCatS (TempFileName, Size / sizeof
> (CHAR16), L"\\*");
> >          PrivateFile->LHandle = FindFirstFile
> (TempFileName, &FindBuf);
> >        }
> >
> > --
> > 2.21.0.windows.1
> >
> >
> > 


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-08-09 21:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-08  2:25 [Patch V2 0/3] EmulatorPkg: Fix VS20xx IA32 boot and simplify build config Michael D Kinney
2019-08-08  2:25 ` [Patch V2 1/3] EmulatorPkg: Fix VS20xx IA32 boot failure Michael D Kinney
2019-08-08  5:54   ` [edk2-devel] " Wu, Hao A
2019-08-08  2:25 ` [Patch V2 2/3] EmulatorPkg: Remove UNIX_SEC_BUILD/WIN_SEC_BUILD Michael D Kinney
2019-08-08  5:55   ` [edk2-devel] " Wu, Hao A
2019-08-08  2:25 ` [Patch V2 3/3] EmulatorPkg: Add -D DISABLE_NEW_DEPRECATED_INTERFACES Michael D Kinney
2019-08-08  5:56   ` [edk2-devel] " Wu, Hao A
2019-08-09 21:31     ` Michael D Kinney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox