]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.c
MdeModulePkg/DxeHttpLib: Fix the incorrect return status if URI port is invalid
[mirror_edk2.git] / MdeModulePkg / Library / DxeHttpLib / DxeHttpLib.c
index 2ff04ffad3ac1b4976c20e1f18a9c12a041f14bd..8e29213a4f2e5813f7eccae04d6087724b8f82b6 100644 (file)
@@ -692,6 +692,7 @@ HttpUrlGetPort (
 {\r
   CHAR8         *PortString;\r
   EFI_STATUS    Status;\r
+  UINTN         Index;\r
   UINTN         Data;\r
   UINT32        ResultLength;\r
   HTTP_URL_PARSER      *Parser;\r
@@ -700,6 +701,9 @@ HttpUrlGetPort (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
+  *Port = 0;\r
+  Index = 0;\r
+\r
   Parser = (HTTP_URL_PARSER*) UrlParser;\r
 \r
   if ((Parser->FieldBitMap & BIT (HTTP_URI_FIELD_PORT)) == 0) {\r
@@ -723,8 +727,19 @@ HttpUrlGetPort (
 \r
   PortString[ResultLength] = '\0';\r
 \r
+  while (Index < ResultLength) {\r
+    if (!NET_IS_DIGIT (PortString[Index])) {\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
+    Index ++;\r
+  }\r
+\r
   Status =  AsciiStrDecimalToUintnS (Url + Parser->FieldData[HTTP_URI_FIELD_PORT].Offset, (CHAR8 **) NULL, &Data);\r
 \r
+  if (Data > HTTP_URI_PORT_MAX_NUM || Data < HTTP_URI_PORT_MIN_NUM) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
   *Port = (UINT16) Data;\r
   return Status;\r
 }\r