]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg:Fix a bug HttpLib can't parse last chunked data well
authorZhang Lubo <lubo.zhang@intel.com>
Thu, 17 Dec 2015 01:12:11 +0000 (01:12 +0000)
committerluobozhang <luobozhang@Edk2>
Thu, 17 Dec 2015 01:12:11 +0000 (01:12 +0000)
When HttpLib parsing the last chunked data down, the Http NextMsg pointer
in the HttpBodyParserCallback function should point to the character
after '/n' flag.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <lubo.zhang@intel.com>
Reviewed-by: Fu Siyuan <siyuan.fu@intel.com>
Reviewed-by: Ye Ting <ting.ye@intel.com>
Reviewed-by: Wu Jiaxin <jiaxin.wu@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19310 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Library/DxeHttpLib/DxeHttpLib.c

index 49fa80ba8c30d6a6bae20c299e90141b8b7c97d1..143baabdec9ddcd662cde842973f0b7fef196e45 100644 (file)
@@ -1161,21 +1161,7 @@ HttpParseMessageBody (
     switch (Parser->State) {\r
     case BodyParserStateMax:\r
       return EFI_ABORTED;\r
-\r
-    case BodyParserComplete:\r
-      if (Parser->Callback != NULL) {\r
-        Status = Parser->Callback (\r
-                   BodyParseEventOnComplete,\r
-                   Char,\r
-                   0,\r
-                   Parser->Context\r
-                   );\r
-        if (EFI_ERROR (Status)) {\r
-          return Status;\r
-        }\r
-      }\r
-      return EFI_SUCCESS;\r
-    \r
\r
     case BodyParserBodyIdentity:\r
       //\r
       // Identity transfer-coding, just notify user to save the body data.\r
@@ -1195,6 +1181,17 @@ HttpParseMessageBody (
       Parser->ParsedBodyLength += MIN (BodyLength, Parser->ContentLength - Parser->ParsedBodyLength);\r
       if (Parser->ParsedBodyLength == Parser->ContentLength) {\r
         Parser->State = BodyParserComplete;\r
+        if (Parser->Callback != NULL) {\r
+          Status = Parser->Callback (\r
+                     BodyParseEventOnComplete,\r
+                     Char,\r
+                     0,\r
+                     Parser->Context\r
+                     );\r
+          if (EFI_ERROR (Status)) {\r
+            return Status;\r
+          }\r
+        }\r
       }\r
       break;\r
 \r
@@ -1272,6 +1269,18 @@ HttpParseMessageBody (
     case BodyParserLastCRLFEnd:\r
       if (*Char == '\n') {\r
         Parser->State = BodyParserComplete;\r
+        Char++;\r
+        if (Parser->Callback != NULL) {\r
+          Status = Parser->Callback (\r
+                     BodyParseEventOnComplete,\r
+                     Char,\r
+                     0,\r
+                     Parser->Context\r
+                     );\r
+          if (EFI_ERROR (Status)) {\r
+            return Status;\r
+          }\r
+        }\r
         break;\r
       } else {\r
         Parser->State = BodyParserStateMax;\r