From 172f71a497ab3db32079326aa915a4c139ef4866 Mon Sep 17 00:00:00 2001 From: Zhang Lubo Date: Mon, 21 Dec 2015 07:20:40 +0000 Subject: 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. (Sync patch r19423 from main trunk.) 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/branches/UDK2015@19428 6f19259b-4bc3-4df7-8a09-765794883524 --- NetworkPkg/HttpDxe/HttpImpl.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'NetworkPkg') 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. -- cgit v1.2.3