Revision: 14330
http://edk2.svn.sourceforge.net/edk2/?rev=14330&view=rev
Author: vanjeff
Date: 2013-05-09 02:54:01 +0000 (Thu, 09 May 2013)
Log Message:
-----------
Sync patches r13208, r13473, r13563, r13638, r13642, r13650 and r13656 from
main trunk.
1. Fix SMM Variable driver stack GetVariable return INVALID_PARAMETER when
DataSize is bigger than SMM communication buffer.
2. Fix potential overflow for SetVariable interface.
3. Use the check IsAddressValid() to prevent SMM communication buffer overflow
in SmmVariable, FtwSmm, FpdtSmm, SmmCorePerformance and SmmBaseHelper, and add
check to prevent InfoSize overflows in SmmVariableHandler.
4. Add check to make sure the input VariableName is A Null-terminated string.
5. Use local variable to hold StrSize (VariableName) to avoid duplicated
StrSize calculation.
Revision Links:
--------------
http://edk2.svn.sourceforge.net/edk2/?rev=13208&view=rev
http://edk2.svn.sourceforge.net/edk2/?rev=13473&view=rev
http://edk2.svn.sourceforge.net/edk2/?rev=13563&view=rev
http://edk2.svn.sourceforge.net/edk2/?rev=13638&view=rev
http://edk2.svn.sourceforge.net/edk2/?rev=13642&view=rev
http://edk2.svn.sourceforge.net/edk2/?rev=13650&view=rev
http://edk2.svn.sourceforge.net/edk2/?rev=13656&view=rev
Modified Paths:
--------------
branches/UDK2010.SR1/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBus.c
branches/UDK2010.SR1/IntelFrameworkModulePkg/Universal/SectionExtractionDxe/SectionExtraction.c
branches/UDK2010.SR1/MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c
branches/UDK2010.SR1/MdeModulePkg/Core/PiSmmCore/Dispatcher.c
branches/UDK2010.SR1/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
branches/UDK2010.SR1/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c
branches/UDK2010.SR1/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
branches/UDK2010.SR1/MdeModulePkg/Universal/HiiDatabaseDxe/String.c
branches/UDK2010.SR1/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
branches/UDK2010.SR1/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
branches/UDK2010.SR1/MdePkg/Library/BasePrintLib/PrintLibInternal.c
Modified:
branches/UDK2010.SR1/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBus.c
===================================================================
--- branches/UDK2010.SR1/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBus.c
2013-05-09 01:51:45 UTC (rev 14329)
+++ branches/UDK2010.SR1/IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBus.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -1475,7 +1475,7 @@
// Reset IDE device to force it de-assert interrupt pin
// Note: this will reset all devices on this IDE channel
//
- AtaSoftReset (IdeDev);
+ Status = AtaSoftReset (IdeDev);
if (EFI_ERROR (Status)) {
return;
}
Modified:
branches/UDK2010.SR1/IntelFrameworkModulePkg/Universal/SectionExtractionDxe/SectionExtraction.c
===================================================================
---
branches/UDK2010.SR1/IntelFrameworkModulePkg/Universal/SectionExtractionDxe/SectionExtraction.c
2013-05-09 01:51:45 UTC (rev 14329)
+++
branches/UDK2010.SR1/IntelFrameworkModulePkg/Universal/SectionExtractionDxe/SectionExtraction.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -76,6 +76,11 @@
//
UINTN EncapsulatedStreamHandle;
EFI_GUID *EncapsulationGuid;
+ //
+ // If the section REQUIRES an extraction protocol, register for RPN
+ // when the required GUIDed extraction protocol becomes available.
+ //
+ EFI_EVENT Event;
} FRAMEWORK_SECTION_CHILD_NODE;
#define FRAMEWORK_SECTION_STREAM_SIGNATURE SIGNATURE_32('S','X','S','S')
@@ -101,7 +106,6 @@
FRAMEWORK_SECTION_CHILD_NODE *ChildNode;
FRAMEWORK_SECTION_STREAM_NODE *ParentStream;
VOID *Registration;
- EFI_EVENT Event;
} RPN_EVENT_CONTEXT;
/**
@@ -650,12 +654,13 @@
}
//
- // If above, the stream did not close successfully, it indicates it's
- // alread been closed by someone, so just destroy the event and be done with
+ // If above, the stream did not close successfully, it indicates it's
+ // already been closed by someone, so just destroy the event and be done
with
// it.
//
gBS->CloseEvent (Event);
+ Context->ChildNode->Event = NULL;
FreePool (Context);
}
@@ -684,14 +689,14 @@
Context->ChildNode = ChildNode;
Context->ParentStream = ParentStream;
- Context->Event = CreateProtocolNotifyEvent (
- Context->ChildNode->EncapsulationGuid,
- TPL_NOTIFY,
- NotifyGuidedExtraction,
- Context,
- &Context->Registration,
- FALSE
- );
+ Context->ChildNode->Event = CreateProtocolNotifyEvent (
+ Context->ChildNode->EncapsulationGuid,
+ TPL_NOTIFY,
+ NotifyGuidedExtraction,
+ Context,
+ &Context->Registration,
+ FALSE
+ );
}
/**
@@ -743,7 +748,7 @@
//
// Allocate a new node
//
- *ChildNode = AllocatePool (sizeof (FRAMEWORK_SECTION_CHILD_NODE));
+ *ChildNode = AllocateZeroPool (sizeof (FRAMEWORK_SECTION_CHILD_NODE));
Node = *ChildNode;
if (Node == NULL) {
return EFI_OUT_OF_RESOURCES;
@@ -1092,6 +1097,7 @@
CurrentChildNode = CHILD_SECTION_NODE_FROM_LINK
(GetFirstNode(&SourceStream->Children));
for (;;) {
+ ASSERT (CurrentChildNode != NULL);
if (ChildIsType (SourceStream, CurrentChildNode, SearchType,
SectionDefinitionGuid)) {
//
// The type matches, so check the instance count to see if it's the one
we want
@@ -1108,7 +1114,6 @@
}
}
- ASSERT (CurrentChildNode != NULL);
if (CurrentChildNode->EncapsulatedStreamHandle != NULL_STREAM_HANDLE) {
//
// If the current node is an encapsulating node, recurse into it...
@@ -1386,6 +1391,11 @@
//
CloseSectionStream (&mSectionExtraction,
ChildNode->EncapsulatedStreamHandle);
}
+
+ if (ChildNode->Event != NULL) {
+ gBS->CloseEvent (ChildNode->Event);
+ }
+
//
// Last, free the child node itself
//
Modified:
branches/UDK2010.SR1/MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c
===================================================================
---
branches/UDK2010.SR1/MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c
2013-05-09 01:51:45 UTC (rev 14329)
+++
branches/UDK2010.SR1/MdeModulePkg/Core/Dxe/SectionExtraction/CoreSectionExtraction.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -66,6 +66,11 @@
//
UINTN EncapsulatedStreamHandle;
EFI_GUID *EncapsulationGuid;
+ //
+ // If the section REQUIRES an extraction protocol, register for RPN
+ // when the required GUIDed extraction protocol becomes available.
+ //
+ EFI_EVENT Event;
} CORE_SECTION_CHILD_NODE;
#define CORE_SECTION_STREAM_SIGNATURE SIGNATURE_32('S','X','S','S')
@@ -91,7 +96,6 @@
CORE_SECTION_CHILD_NODE *ChildNode;
CORE_SECTION_STREAM_NODE *ParentStream;
VOID *Registration;
- EFI_EVENT Event;
} RPN_EVENT_CONTEXT;
@@ -604,6 +608,7 @@
// Close the event when done.
//
gBS->CloseEvent (Event);
+ Context->ChildNode->Event = NULL;
FreePool (Context);
}
@@ -631,13 +636,13 @@
Context->ChildNode = ChildNode;
Context->ParentStream = ParentStream;
- Context->Event = EfiCreateProtocolNotifyEvent (
- Context->ChildNode->EncapsulationGuid,
- TPL_NOTIFY,
- NotifyGuidedExtraction,
- Context,
- &Context->Registration
- );
+ Context->ChildNode->Event = EfiCreateProtocolNotifyEvent (
+ Context->ChildNode->EncapsulationGuid,
+ TPL_NOTIFY,
+ NotifyGuidedExtraction,
+ Context,
+ &Context->Registration
+ );
}
/**
@@ -692,7 +697,7 @@
//
// Allocate a new node
//
- *ChildNode = AllocatePool (sizeof (CORE_SECTION_CHILD_NODE));
+ *ChildNode = AllocateZeroPool (sizeof (CORE_SECTION_CHILD_NODE));
Node = *ChildNode;
if (Node == NULL) {
return EFI_OUT_OF_RESOURCES;
@@ -1334,6 +1339,11 @@
//
CloseSectionStream (ChildNode->EncapsulatedStreamHandle);
}
+
+ if (ChildNode->Event != NULL) {
+ gBS->CloseEvent (ChildNode->Event);
+ }
+
//
// Last, free the child node itself
//
Modified: branches/UDK2010.SR1/MdeModulePkg/Core/PiSmmCore/Dispatcher.c
===================================================================
--- branches/UDK2010.SR1/MdeModulePkg/Core/PiSmmCore/Dispatcher.c
2013-05-09 01:51:45 UTC (rev 14329)
+++ branches/UDK2010.SR1/MdeModulePkg/Core/PiSmmCore/Dispatcher.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -405,7 +405,7 @@
if (EFI_ERROR (Status)) {
if (Buffer != NULL) {
- Status = gBS->FreePool (Buffer);
+ gBS->FreePool (Buffer);
}
return Status;
}
@@ -453,7 +453,7 @@
Status = PeCoffLoaderGetImageInfo (&ImageContext);
if (EFI_ERROR (Status)) {
if (Buffer != NULL) {
- Status = gBS->FreePool (Buffer);
+ gBS->FreePool (Buffer);
}
return Status;
}
@@ -489,7 +489,7 @@
);
if (EFI_ERROR (Status)) {
if (Buffer != NULL) {
- Status = gBS->FreePool (Buffer);
+ gBS->FreePool (Buffer);
}
return Status;
}
@@ -507,7 +507,7 @@
);
if (EFI_ERROR (Status)) {
if (Buffer != NULL) {
- Status = gBS->FreePool (Buffer);
+ gBS->FreePool (Buffer);
}
return Status;
}
@@ -526,7 +526,7 @@
Status = PeCoffLoaderLoadImage (&ImageContext);
if (EFI_ERROR (Status)) {
if (Buffer != NULL) {
- Status = gBS->FreePool (Buffer);
+ gBS->FreePool (Buffer);
}
SmmFreePages (DstBuffer, PageCount);
return Status;
@@ -538,7 +538,7 @@
Status = PeCoffLoaderRelocateImage (&ImageContext);
if (EFI_ERROR (Status)) {
if (Buffer != NULL) {
- Status = gBS->FreePool (Buffer);
+ gBS->FreePool (Buffer);
}
SmmFreePages (DstBuffer, PageCount);
return Status;
@@ -562,7 +562,7 @@
Status = gBS->AllocatePool (EfiBootServicesData, sizeof
(EFI_LOADED_IMAGE_PROTOCOL), (VOID **)&DriverEntry->LoadedImage);
if (EFI_ERROR (Status)) {
if (Buffer != NULL) {
- Status = gBS->FreePool (Buffer);
+ gBS->FreePool (Buffer);
}
SmmFreePages (DstBuffer, PageCount);
return Status;
@@ -583,7 +583,7 @@
Status = gBS->AllocatePool (EfiBootServicesData, GetDevicePathSize
(FilePath), (VOID **)&DriverEntry->LoadedImage->FilePath);
if (EFI_ERROR (Status)) {
if (Buffer != NULL) {
- Status = gBS->FreePool (Buffer);
+ gBS->FreePool (Buffer);
}
SmmFreePages (DstBuffer, PageCount);
return Status;
Modified:
branches/UDK2010.SR1/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
===================================================================
---
branches/UDK2010.SR1/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
2013-05-09 01:51:45 UTC (rev 14329)
+++
branches/UDK2010.SR1/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -369,7 +369,7 @@
NewNotify->Signature = TERMINAL_CONSOLE_IN_EX_NOTIFY_SIGNATURE;
NewNotify->KeyNotificationFn = KeyNotificationFunction;
NewNotify->NotifyHandle = (EFI_HANDLE) NewNotify;
- CopyMem (&NewNotify->KeyData, KeyData, sizeof (KeyData));
+ CopyMem (&NewNotify->KeyData, KeyData, sizeof (EFI_KEY_DATA));
InsertTailList (&TerminalDevice->NotifyList, &NewNotify->NotifyEntry);
*NotifyHandle = NewNotify->NotifyHandle;
@@ -1458,6 +1458,7 @@
if (TerminalDevice->TerminalType == PCANSITYPE) {
Key.ScanCode = SCAN_F10;
}
+ break;
case '?':
if (TerminalDevice->TerminalType == VT100TYPE) {
Key.ScanCode = SCAN_PAGE_UP;
@@ -1472,6 +1473,7 @@
if (TerminalDevice->TerminalType == PCANSITYPE) {
Key.ScanCode = SCAN_F9;
}
+ break;
case '/':
if (TerminalDevice->TerminalType == VT100TYPE) {
Key.ScanCode = SCAN_PAGE_DOWN;
Modified:
branches/UDK2010.SR1/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c
===================================================================
---
branches/UDK2010.SR1/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c
2013-05-09 01:51:45 UTC (rev 14329)
+++
branches/UDK2010.SR1/MdeModulePkg/Universal/DevicePathDxe/DevicePathFromText.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -1,7 +1,7 @@
/** @file
DevicePathFromText protocol as defined in the UEFI 2.0 specification.
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -2006,6 +2006,7 @@
case L'S':
Uart->Parity = 5;
+ break;
default:
Uart->Parity = 0xff;
Modified:
branches/UDK2010.SR1/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
===================================================================
--- branches/UDK2010.SR1/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
2013-05-09 01:51:45 UTC (rev 14329)
+++ branches/UDK2010.SR1/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigRouting.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -1,7 +1,7 @@
/** @file
Implementation of interfaces function for EFI_HII_CONFIG_ROUTING_PROTOCOL.
-Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -997,6 +997,8 @@
EFI_IFR_CHECKBOX *IfrCheckBox;
EFI_IFR_PASSWORD *IfrPassword;
EFI_IFR_STRING *IfrString;
+ EFI_IFR_DATE *IfrDate;
+ EFI_IFR_TIME *IfrTime;
IFR_DEFAULT_DATA DefaultData;
IFR_DEFAULT_DATA *DefaultDataPtr;
IFR_BLOCK_DATA *BlockData;
@@ -1505,6 +1507,140 @@
InsertDefaultValue (BlockData, &DefaultData);
break;
+ case EFI_IFR_DATE_OP:
+ //
+ // offset by question header
+ // width MaxSize * sizeof (CHAR16)
+ // no default value, only block array
+ //
+
+ //
+ // Date question is not in IFR Form. This IFR form is not valid.
+ //
+ if (VarStorageData->Size == 0) {
+ Status = EFI_INVALID_PARAMETER;
+ goto Done;
+ }
+ //
+ // Check whether this question is for the requested varstore.
+ //
+ IfrDate = (EFI_IFR_DATE *) IfrOpHdr;
+ if (IfrDate->Question.VarStoreId != VarStorageData->VarStoreId) {
+ break;
+ }
+
+ //
+ // Get Offset/Width by Question header and OneOf Flags
+ //
+ VarOffset = IfrDate->Question.VarStoreInfo.VarOffset;
+ VarWidth = (UINT16) sizeof (EFI_HII_DATE);
+
+ //
+ // Check whether this question is in requested block array.
+ //
+ if (!BlockArrayCheck (RequestBlockArray, VarOffset, VarWidth)) {
+ //
+ // This question is not in the requested array. Skip it.
+ //
+ break;
+ }
+
+ //
+ // Check this var question is in the var storage
+ //
+ if ((VarOffset + VarWidth) > VarStorageData->Size) {
+ Status = EFI_INVALID_PARAMETER;
+ goto Done;
+ }
+
+ //
+ // Set Block Data
+ //
+ BlockData = (IFR_BLOCK_DATA *) AllocateZeroPool (sizeof
(IFR_BLOCK_DATA));
+ if (BlockData == NULL) {
+ Status = EFI_OUT_OF_RESOURCES;
+ goto Done;
+ }
+ BlockData->Offset = VarOffset;
+ BlockData->Width = VarWidth;
+ BlockData->QuestionId = IfrDate->Question.QuestionId;
+ BlockData->OpCode = IfrOpHdr->OpCode;
+ BlockData->Scope = IfrOpHdr->Scope;
+ InitializeListHead (&BlockData->DefaultValueEntry);
+
+ //
+ // Add Block Data into VarStorageData BlockEntry
+ //
+ InsertBlockData (&VarStorageData->BlockEntry, &BlockData);
+ break;
+
+ case EFI_IFR_TIME_OP:
+ //
+ // offset by question header
+ // width MaxSize * sizeof (CHAR16)
+ // no default value, only block array
+ //
+
+ //
+ // Time question is not in IFR Form. This IFR form is not valid.
+ //
+ if (VarStorageData->Size == 0) {
+ Status = EFI_INVALID_PARAMETER;
+ goto Done;
+ }
+ //
+ // Check whether this question is for the requested varstore.
+ //
+ IfrTime = (EFI_IFR_TIME *) IfrOpHdr;
+ if (IfrTime->Question.VarStoreId != VarStorageData->VarStoreId) {
+ break;
+ }
+
+ //
+ // Get Offset/Width by Question header and OneOf Flags
+ //
+ VarOffset = IfrTime->Question.VarStoreInfo.VarOffset;
+ VarWidth = (UINT16) sizeof (EFI_HII_TIME);
+
+ //
+ // Check whether this question is in requested block array.
+ //
+ if (!BlockArrayCheck (RequestBlockArray, VarOffset, VarWidth)) {
+ //
+ // This question is not in the requested array. Skip it.
+ //
+ break;
+ }
+
+ //
+ // Check this var question is in the var storage
+ //
+ if ((VarOffset + VarWidth) > VarStorageData->Size) {
+ Status = EFI_INVALID_PARAMETER;
+ goto Done;
+ }
+
+ //
+ // Set Block Data
+ //
+ BlockData = (IFR_BLOCK_DATA *) AllocateZeroPool (sizeof
(IFR_BLOCK_DATA));
+ if (BlockData == NULL) {
+ Status = EFI_OUT_OF_RESOURCES;
+ goto Done;
+ }
+ BlockData->Offset = VarOffset;
+ BlockData->Width = VarWidth;
+ BlockData->QuestionId = IfrTime->Question.QuestionId;
+ BlockData->OpCode = IfrOpHdr->OpCode;
+ BlockData->Scope = IfrOpHdr->Scope;
+ InitializeListHead (&BlockData->DefaultValueEntry);
+
+ //
+ // Add Block Data into VarStorageData BlockEntry
+ //
+ InsertBlockData (&VarStorageData->BlockEntry, &BlockData);
+ break;
+
case EFI_IFR_STRING_OP:
//
// offset by question header
Modified: branches/UDK2010.SR1/MdeModulePkg/Universal/HiiDatabaseDxe/String.c
===================================================================
--- branches/UDK2010.SR1/MdeModulePkg/Universal/HiiDatabaseDxe/String.c
2013-05-09 01:51:45 UTC (rev 14329)
+++ branches/UDK2010.SR1/MdeModulePkg/Universal/HiiDatabaseDxe/String.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -2,7 +2,7 @@
Implementation for EFI_HII_STRING_PROTOCOL.
-Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2007 - 2012, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
which accompanies this distribution. The full text of the license may be
found at
@@ -899,6 +899,7 @@
EFI_STRING_ID StartStringId;
StartStringId = 0;
+ StringSize = 0;
ASSERT (Private != NULL && StringPackage != NULL && String != NULL);
ASSERT (Private->Signature == HII_DATABASE_PRIVATE_DATA_SIGNATURE);
//
Modified: branches/UDK2010.SR1/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
===================================================================
--- branches/UDK2010.SR1/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
2013-05-09 01:51:45 UTC (rev 14329)
+++ branches/UDK2010.SR1/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -750,7 +750,7 @@
String = HiiGetString (HiiHandle, Token, NULL);
if (String == NULL) {
- String = AllocateCopyPool (sizeof (mUnknownString), mUnknownString);
+ String = AllocateCopyPool (StrSize (mUnknownString), mUnknownString);
ASSERT (String != NULL);
}
return (CHAR16 *) String;
@@ -3262,7 +3262,7 @@
//
// Initilize Questions' Value
//
- LoadFormSetConfig (NULL, LocalFormSet);
+ Status = LoadFormSetConfig (NULL, LocalFormSet);
if (EFI_ERROR (Status)) {
DestroyFormSet (LocalFormSet);
continue;
Modified: branches/UDK2010.SR1/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
===================================================================
--- branches/UDK2010.SR1/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
2013-05-09 01:51:45 UTC (rev 14329)
+++ branches/UDK2010.SR1/MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -767,7 +767,9 @@
//
MenuOption->GrayOut = TRUE;
}
-
+ //
+ // break skipped on purpose
+ //
default:
MenuOption->IsQuestion = FALSE;
break;
@@ -955,6 +957,9 @@
TempString[Index - 1] = CHAR_NULL;
StrCpy (StringBuffer, TempString);
}
+ //
+ // break skipped on purpose
+ //
default:
//
Modified: branches/UDK2010.SR1/MdePkg/Library/BasePrintLib/PrintLibInternal.c
===================================================================
--- branches/UDK2010.SR1/MdePkg/Library/BasePrintLib/PrintLibInternal.c
2013-05-09 01:51:45 UTC (rev 14329)
+++ branches/UDK2010.SR1/MdePkg/Library/BasePrintLib/PrintLibInternal.c
2013-05-09 02:54:01 UTC (rev 14330)
@@ -517,6 +517,9 @@
if (sizeof (VOID *) > 4) {
Flags |= LONG_TYPE;
}
+ //
+ // break skipped on purpose
+ //
case 'X':
Flags |= PREFIX_ZERO;
//
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and
their applications. This 200-page book is written by three acclaimed
leaders in the field. The early access version is available now.
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits