MdePkg UefiDevicePathLib: Rollback former change.

Former patch still has some bugs, so rollback it and
enhance the original code.

Cc: Ruiyu NI <ruiyu.ni@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathUtilities.c b/MdePkg/Library/UefiDevicePathLib/DevicePathUtilities.c
index 82419a4..024dcc2 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathUtilities.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathUtilities.c
@@ -61,35 +61,25 @@
 

   ASSERT (DevicePath != NULL);

 

-  if (MaxSize == 0){

-    MaxSize = MAX_UINTN;

-  }

-

-  Size = 0;

-  Count = 0;

-

-  while (MaxSize >= sizeof (EFI_DEVICE_PATH_PROTOCOL) &&

-        (MaxSize - sizeof (EFI_DEVICE_PATH_PROTOCOL) >= Size) &&

-        !IsDevicePathEnd (DevicePath)) {

+  for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) {

     NodeLength = DevicePathNodeLength (DevicePath);

     if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {

       return FALSE;

     }

 

-    if (NodeLength > MAX_UINTN - Size) {

-      return FALSE;

+    if (MaxSize > 0) {

+      Size += NodeLength;

+      if (Size + END_DEVICE_PATH_LENGTH > MaxSize) {

+        return FALSE;

+      }

     }

 

-    Size += NodeLength;

-

     if (PcdGet32 (PcdMaximumDevicePathNodeCount) > 0) {

       Count++;

       if (Count >= PcdGet32 (PcdMaximumDevicePathNodeCount)) {

         return FALSE;

       }

     }

-

-    DevicePath = NextDevicePathNode (DevicePath);

   }

 

   //