Add a checking step in DevicePathUtilities.c
to verify DevicePath.
https://bugzilla.tianocore.org/show_bug.cgi?id=1372
v2: Remove ASSERT() and the redundant checking step.
Update related description.
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
\r
/**\r
Determine whether a given device path is valid.\r
\r
/**\r
Determine whether a given device path is valid.\r
- If DevicePath is NULL, then ASSERT().\r
\r
@param DevicePath A pointer to a device path data structure.\r
@param MaxSize The maximum size of the device path data structure.\r
\r
@retval TRUE DevicePath is valid.\r
\r
@param DevicePath A pointer to a device path data structure.\r
@param MaxSize The maximum size of the device path data structure.\r
\r
@retval TRUE DevicePath is valid.\r
+ @retval FALSE DevicePath is NULL.\r
+ @retval FALSE Maxsize is less than sizeof(EFI_DEVICE_PATH_PROTOCOL).\r
@retval FALSE The length of any node node in the DevicePath is less\r
than sizeof (EFI_DEVICE_PATH_PROTOCOL).\r
@retval FALSE If MaxSize is not zero, the size of the DevicePath\r
@retval FALSE The length of any node node in the DevicePath is less\r
than sizeof (EFI_DEVICE_PATH_PROTOCOL).\r
@retval FALSE If MaxSize is not zero, the size of the DevicePath\r
UINTN Size;\r
UINTN NodeLength;\r
\r
UINTN Size;\r
UINTN NodeLength;\r
\r
- ASSERT (DevicePath != NULL);\r
-\r
- if (MaxSize == 0) {\r
- MaxSize = MAX_UINT32;\r
- }\r
-\r
- // Validate the input size big enough to touch the first node.\r
+ // Validate the input whether exists and its size big enough to touch the first node\r
- if (MaxSize < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {\r
+ if (DevicePath == NULL || (MaxSize > 0 && MaxSize < END_DEVICE_PATH_LENGTH)) {\r
+ if (MaxSize == 0) {\r
+ MaxSize = MAX_UINT32;\r
+ }\r
+\r
for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) {\r
NodeLength = DevicePathNodeLength (DevicePath);\r
if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {\r
for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) {\r
NodeLength = DevicePathNodeLength (DevicePath);\r
if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {\r