mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 08:34:07 +02:00
BaseTools/DevicePath: Add a checking step
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>
This commit is contained in:
parent
fd02394228
commit
ca67441558
@ -36,12 +36,13 @@ CONST EFI_DEVICE_PATH_PROTOCOL mUefiDevicePathLibEndDevicePath = {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Determine whether a given device path is valid.
|
Determine whether a given device path is valid.
|
||||||
If DevicePath is NULL, then ASSERT().
|
|
||||||
|
|
||||||
@param DevicePath A pointer to a device path data structure.
|
@param DevicePath A pointer to a device path data structure.
|
||||||
@param MaxSize The maximum size of the device path data structure.
|
@param MaxSize The maximum size of the device path data structure.
|
||||||
|
|
||||||
@retval TRUE DevicePath is valid.
|
@retval TRUE DevicePath is valid.
|
||||||
|
@retval FALSE DevicePath is NULL.
|
||||||
|
@retval FALSE Maxsize is less than sizeof(EFI_DEVICE_PATH_PROTOCOL).
|
||||||
@retval FALSE The length of any node node in the DevicePath is less
|
@retval FALSE The length of any node node in the DevicePath is less
|
||||||
than sizeof (EFI_DEVICE_PATH_PROTOCOL).
|
than sizeof (EFI_DEVICE_PATH_PROTOCOL).
|
||||||
@retval FALSE If MaxSize is not zero, the size of the DevicePath
|
@retval FALSE If MaxSize is not zero, the size of the DevicePath
|
||||||
@ -59,19 +60,17 @@ IsDevicePathValid (
|
|||||||
UINTN Size;
|
UINTN Size;
|
||||||
UINTN NodeLength;
|
UINTN NodeLength;
|
||||||
|
|
||||||
ASSERT (DevicePath != NULL);
|
//
|
||||||
|
// Validate the input whether exists and its size big enough to touch the first node
|
||||||
|
//
|
||||||
|
if (DevicePath == NULL || (MaxSize > 0 && MaxSize < END_DEVICE_PATH_LENGTH)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (MaxSize == 0) {
|
if (MaxSize == 0) {
|
||||||
MaxSize = MAX_UINT32;
|
MaxSize = MAX_UINT32;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Validate the input size big enough to touch the first node.
|
|
||||||
//
|
|
||||||
if (MaxSize < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) {
|
for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) {
|
||||||
NodeLength = DevicePathNodeLength (DevicePath);
|
NodeLength = DevicePathNodeLength (DevicePath);
|
||||||
if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {
|
if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user