From 5ba9f065a5cd401330281763fae1135961cfd8c4 Mon Sep 17 00:00:00 2001 From: Zhang Lubo Date: Mon, 21 Dec 2015 01:36:08 +0000 Subject: [PATCH] NetworkPkg:Fix a bug the 2nd httpboot fail issue. Httpboot over Ipv4 or Ipv6 stack,for both Identity and chunked transfer mode,when the last data has been parsed by HttpLib, the HttpInstance->NextMsg pointer should point a correct location.Now after the first successful httpboot for ipv4 or ipv6,the HttpInstance->NextMsgpoint the character after the last byte, it may be a bad buffer if we don't receive another HttpHeader, so if call a 2nd httpboot, the wrong NextMsg pointer will cause the httpboot fail, so we need to check this case in HttpBodyParserCallback function in the first http boot process. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Zhang Lubo Reviewed-by: Fu Siyuan Reviewed-by: Ye Ting Reviewed-by: Wu Jiaxin git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19423 6f19259b-4bc3-4df7-8a09-765794883524 --- NetworkPkg/HttpDxe/HttpImpl.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/NetworkPkg/HttpDxe/HttpImpl.c b/NetworkPkg/HttpDxe/HttpImpl.c index 0fa437dc32..aee3de517f 100644 --- a/NetworkPkg/HttpDxe/HttpImpl.c +++ b/NetworkPkg/HttpDxe/HttpImpl.c @@ -778,6 +778,8 @@ HttpBodyParserCallback ( ) { HTTP_TOKEN_WRAP *Wrap; + UINTN BodyLength; + CHAR8 *Body; if (EventType != BodyParseEventOnComplete) { return EFI_SUCCESS; @@ -788,7 +790,14 @@ HttpBodyParserCallback ( } Wrap = (HTTP_TOKEN_WRAP *) Context; - Wrap->HttpInstance->NextMsg = Data; + Body = Wrap->HttpToken->Message->Body; + BodyLength = Wrap->HttpToken->Message->BodyLength; + if (Data < Body + BodyLength) { + Wrap->HttpInstance->NextMsg = Data; + } else { + Wrap->HttpInstance->NextMsg = NULL; + } + // // Free Tx4Token or Tx6Token since already received corrsponding HTTP response.