]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IScsiDxe/IScsiMisc.c
NetworkPkg/IScsiDxe: fix IScsiHexToBin() hex parsing
[mirror_edk2.git] / NetworkPkg / IScsiDxe / IScsiMisc.c
index 014700e87a5f48d059f8a9563bb80338f8d59a00..f0f4992b07c797bf4493dddb4fb6c8f461643699 100644 (file)
@@ -376,6 +376,7 @@ IScsiBinToHex (
 \r
   @retval EFI_SUCCESS           The hexadecimal string is converted into a\r
                                 binary encoded buffer.\r
+  @retval EFI_INVALID_PARAMETER Invalid hex encoding found in HexStr.\r
   @retval EFI_BUFFER_TOO_SMALL  The binary buffer is too small to hold the\r
                                 converted data.\r
 **/\r
@@ -402,14 +403,21 @@ IScsiHexToBin (
 \r
   Length = AsciiStrLen (HexStr);\r
 \r
+  //\r
+  // Reject an empty hex string; reject a stray nibble.\r
+  //\r
+  if (Length == 0 || Length % 2 != 0) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   for (Index = 0; Index < Length; Index ++) {\r
     TemStr[0] = HexStr[Index];\r
     Digit = (UINT8) AsciiStrHexToUint64 (TemStr);\r
     if (Digit == 0 && TemStr[0] != '0') {\r
       //\r
-      // Invalid Lun Char.\r
+      // Invalid Hex Char.\r
       //\r
-      break;\r
+      return EFI_INVALID_PARAMETER;\r
     }\r
     if ((Index & 1) == 0) {\r
       BinBuffer [Index/2] = Digit;\r