]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/DxeNetLib/DxeNetLib.c
MdeModulePkg\Library\DxeNetLib: Update the NetLibStrToIp6andPrefix() to return differ...
[mirror_edk2.git] / MdeModulePkg / Library / DxeNetLib / DxeNetLib.c
index 9ab7ab07c082a4e02362f64842793075db21dfb0..a5a6762985567590b7d97be3de815a949dd14c1a 100644 (file)
@@ -2458,6 +2458,10 @@ NetLibAsciiStrToIp4 (
       }\r
     }\r
 \r
+    //\r
+    // Convert the string to IPv4 address. AsciiStrDecimalToUintn stops at the\r
+    // first character that is not a valid decimal character, '.' or '\0' here. \r
+    //\r
     NodeVal = AsciiStrDecimalToUintn (TempStr);\r
     if (NodeVal > 0xFF) {\r
       return EFI_INVALID_PARAMETER;\r
@@ -2525,7 +2529,7 @@ NetLibAsciiStrToIp6 (
   Short       = FALSE;\r
   Update      = FALSE;\r
 \r
-  for (Index = 0; (Index + 1) < 16; Index = (UINT8) (Index + 2)) {\r
+  for (Index = 0; Index < 15; Index = (UINT8) (Index + 2)) {\r
     TempStr = Ip6Str;\r
 \r
     while ((*Ip6Str != '\0') && (*Ip6Str != ':')) {\r
@@ -2587,7 +2591,8 @@ NetLibAsciiStrToIp6 (
     }    \r
 \r
     //\r
-    // Convert the Str to IPv6 address.\r
+    // Convert the string to IPv6 address. AsciiStrHexToUintn stops at the first\r
+    // character that is not a valid hexadecimal character, ':' or '\0' here. \r
     //\r
     NodeVal = AsciiStrHexToUintn (TempStr);\r
     if ((NodeVal > 0xFFFF) || (Index > 14)) {\r
@@ -2754,14 +2759,18 @@ NetLibStrToIp6andPrefix (
     goto Exit;\r
   }\r
 \r
+  //\r
+  // If input string doesn't indicate the prefix length, return 0xff.\r
+  //\r
+  Length = 0xFF;\r
+  \r
   //\r
   // Convert the string to prefix length\r
   //\r
-  Length = 0;\r
   if (PrefixStr != NULL) {\r
 \r
     Status = EFI_INVALID_PARAMETER;\r
-\r
+    Length = 0;\r
     while (*PrefixStr != '\0') {\r
       if (NET_IS_DIGIT (*PrefixStr)) {\r
         Length = (UINT8) (Length * 10 + (*PrefixStr - '0'));\r