From 970d8b4e83f79617b50f4e051e40c6d045f609e0 Mon Sep 17 00:00:00 2001 From: vit9696 Date: Fri, 3 May 2019 04:09:12 +0300 Subject: [PATCH] OcDebugLogLib: Workaround NVRAM log assertions --- Library/OcDebugLogLib/OcLog.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Library/OcDebugLogLib/OcLog.c b/Library/OcDebugLogLib/OcLog.c index a123c492..85c73687 100755 --- a/Library/OcDebugLogLib/OcLog.c +++ b/Library/OcDebugLogLib/OcLog.c @@ -261,9 +261,14 @@ OcLogAddEntry ( // if (ErrorLevel != DEBUG_BULK_INFO && (OcLog->Options & (OC_LOG_VARIABLE | OC_LOG_NONVOLATILE)) != 0) { // - // Do not log timing information to NVRAM, it is already large... + // Do not log timing information to NVRAM, it is already large. + // This check is here, because Microsoft is retarded and asserts. // - Status = AsciiStrCatS (Private->NvramBuffer, Private->NvramBufferSize, Private->LineBuffer); + if (Private->NvramBufferSize - AsciiStrSize (Private->NvramBuffer) >= AsciiStrLen (Private->LineBuffer)) { + Status = AsciiStrCatS (Private->NvramBuffer, Private->NvramBufferSize, Private->LineBuffer); + } else { + Status = EFI_BUFFER_TOO_SMALL; + } if (!EFI_ERROR (Status)) { Attributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS; if ((OcLog->Options & OC_LOG_NONVOLATILE) != 0) { @@ -288,6 +293,10 @@ OcLogAddEntry ( gBS->Stall (SECONDS_TO_MICROSECONDS (1)); OcLog->Options &= ~(OC_LOG_VARIABLE | OC_LOG_NONVOLATILE); } + } else { + gST->ConOut->OutputString (gST->ConOut, L"NVRAM log size exceeded, cannot log!\r\n"); + gBS->Stall (SECONDS_TO_MICROSECONDS (1)); + OcLog->Options &= ~(OC_LOG_VARIABLE | OC_LOG_NONVOLATILE); } } }