diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c index 2dc7471fe2..efb7aac757 100644 --- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c +++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c @@ -135,6 +135,7 @@ PxeBcParseCachedDhcpPacket ( EFI_DHCP4_PACKET_OPTION *Option; UINT8 OfferType; UINTN Index; + UINT8 *Ptr8; CachedPacket->IsPxeOffer = FALSE; ZeroMem (CachedPacket->Dhcp4Option, sizeof (CachedPacket->Dhcp4Option)); @@ -188,6 +189,14 @@ PxeBcParseCachedDhcpPacket ( sizeof (Offer->Dhcp4.Header.BootFileName), PXEBC_DHCP4_TAG_BOOTFILE ); + // + // RFC 2132, Section 9.5 does not strictly state Bootfile name (option 67) is null + // terminated string. So force to append null terminated character at the end of string. + // + ASSERT (Options[PXEBC_DHCP4_TAG_INDEX_BOOTFILE] != NULL); + Ptr8 = (UINT8*)&Options[PXEBC_DHCP4_TAG_INDEX_BOOTFILE]->Data[0]; + Ptr8 += Options[PXEBC_DHCP4_TAG_INDEX_BOOTFILE]->Length; + Ptr8 = '\0'; } else if ((Options[PXEBC_DHCP4_TAG_INDEX_BOOTFILE] == NULL) && (Offer->Dhcp4.Header.BootFileName[0] != 0)) {