MdePkg/BaseMemoryLib*: check for zero length in ZeroMem ()
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Thu, 3 Nov 2016 17:29:01 +0000 (17:29 +0000)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Fri, 4 Nov 2016 09:53:01 +0000 (09:53 +0000)
Unlike other string functions in this library, ZeroMem () does not
return early when the length of the input buffer is 0. So add the
same to ZeroMem () as well, for all implementations of BaseMemoryLib
living under MdePkg/

This fixes an issue with the ARM implementation of BaseMemoryLibOPtDxe,
whose InternalMemZeroMem code does not expect a length of 0, and always
writes at least a single byte.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
MdePkg/Library/BaseMemoryLib/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibMmx/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibOptDxe/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibOptPei/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibRepStr/ZeroMemWrapper.c
MdePkg/Library/BaseMemoryLibSse2/ZeroMemWrapper.c
MdePkg/Library/PeiMemoryLib/ZeroMemWrapper.c
MdePkg/Library/UefiMemoryLib/ZeroMemWrapper.c

index 2a0a038fd6c5aabfbd27cf1b3397e4b9021f000d..9dd0b45e188e5cbb668f75132dc5e8bbd35417e6 100644 (file)
@@ -46,7 +46,11 @@ ZeroMem (
   IN UINTN  Length\r
   )\r
 {\r
-  ASSERT (!(Buffer == NULL && Length > 0));\r
+  if (Length == 0) {\r
+    return Buffer;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
   return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 2a0a038fd6c5aabfbd27cf1b3397e4b9021f000d..9dd0b45e188e5cbb668f75132dc5e8bbd35417e6 100644 (file)
@@ -46,7 +46,11 @@ ZeroMem (
   IN UINTN  Length\r
   )\r
 {\r
-  ASSERT (!(Buffer == NULL && Length > 0));\r
+  if (Length == 0) {\r
+    return Buffer;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
   return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 2a0a038fd6c5aabfbd27cf1b3397e4b9021f000d..9dd0b45e188e5cbb668f75132dc5e8bbd35417e6 100644 (file)
@@ -46,7 +46,11 @@ ZeroMem (
   IN UINTN  Length\r
   )\r
 {\r
-  ASSERT (!(Buffer == NULL && Length > 0));\r
+  if (Length == 0) {\r
+    return Buffer;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
   return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 2a0a038fd6c5aabfbd27cf1b3397e4b9021f000d..9dd0b45e188e5cbb668f75132dc5e8bbd35417e6 100644 (file)
@@ -46,7 +46,11 @@ ZeroMem (
   IN UINTN  Length\r
   )\r
 {\r
-  ASSERT (!(Buffer == NULL && Length > 0));\r
+  if (Length == 0) {\r
+    return Buffer;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
   return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 2a0a038fd6c5aabfbd27cf1b3397e4b9021f000d..9dd0b45e188e5cbb668f75132dc5e8bbd35417e6 100644 (file)
@@ -46,7 +46,11 @@ ZeroMem (
   IN UINTN  Length\r
   )\r
 {\r
-  ASSERT (!(Buffer == NULL && Length > 0));\r
+  if (Length == 0) {\r
+    return Buffer;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
   return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 2a0a038fd6c5aabfbd27cf1b3397e4b9021f000d..9dd0b45e188e5cbb668f75132dc5e8bbd35417e6 100644 (file)
@@ -46,7 +46,11 @@ ZeroMem (
   IN UINTN  Length\r
   )\r
 {\r
-  ASSERT (!(Buffer == NULL && Length > 0));\r
+  if (Length == 0) {\r
+    return Buffer;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
   return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 5adddbbfad66aba7a7374c652ecc5766ad08af3d..a3aa7d10a689f53ec95fc196aec1faa721c1383d 100644 (file)
@@ -46,7 +46,11 @@ ZeroMem (
   IN UINTN  Length\r
   )\r
 {\r
-  ASSERT (!(Buffer == NULL && Length > 0));\r
+  if (Length == 0) {\r
+    return Buffer;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
   return InternalMemZeroMem (Buffer, Length);\r
 }\r
index 5adddbbfad66aba7a7374c652ecc5766ad08af3d..a3aa7d10a689f53ec95fc196aec1faa721c1383d 100644 (file)
@@ -46,7 +46,11 @@ ZeroMem (
   IN UINTN  Length\r
   )\r
 {\r
-  ASSERT (!(Buffer == NULL && Length > 0));\r
+  if (Length == 0) {\r
+    return Buffer;\r
+  }\r
+\r
+  ASSERT (Buffer != NULL);\r
   ASSERT (Length <= (MAX_ADDRESS - (UINTN)Buffer + 1));\r
   return InternalMemZeroMem (Buffer, Length);\r
 }\r