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 <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@19423 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Zhang Lubo 2015-12-21 01:36:08 +00:00 committed by luobozhang
parent df56e80886
commit 5ba9f065a5
1 changed files with 10 additions and 1 deletions

View File

@ -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.