From cf7d9e736030160836706a8a1f269eb09b22cfb9 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Fri, 22 Apr 2022 16:48:17 +0200 Subject: [PATCH] readline: Fix 1 uncaught NULL deref --- common/lib/readline.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/common/lib/readline.c b/common/lib/readline.c index 12e6963b..119e1181 100644 --- a/common/lib/readline.c +++ b/common/lib/readline.c @@ -263,12 +263,16 @@ int pit_sleep_and_quit_on_keypress(int seconds) { EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *exproto = NULL; EFI_SIMPLE_TEXT_IN_PROTOCOL *sproto = NULL; + bool use_sproto = false; + if (gBS->HandleProtocol(gST->ConsoleInHandle, &exproto_guid, (void **)&exproto) != EFI_SUCCESS) { if (gBS->HandleProtocol(gST->ConsoleInHandle, &sproto_guid, (void **)&sproto) != EFI_SUCCESS) { panic(false, "Your input device doesn't have an input protocol!"); } events[0] = sproto->WaitForKey; + + use_sproto = true; } else { events[0] = exproto->WaitForKeyEx; } @@ -287,7 +291,7 @@ again: } EFI_STATUS status; - if (events[0] == sproto->WaitForKey) { + if (use_sproto) { status = sproto->ReadKeyStroke(sproto, &kd.Key); } else { status = exproto->ReadKeyStrokeEx(exproto, &kd); @@ -316,7 +320,7 @@ again: return GETCHAR_ESCAPE; } - if (events[0] == sproto->WaitForKey) { + if (use_sproto) { status = sproto->ReadKeyStroke(sproto, &kd.Key); } else { status = exproto->ReadKeyStrokeEx(exproto, &kd); @@ -327,7 +331,7 @@ again: } if (kd.Key.UnicodeChar == '[') { - return input_sequence(events[0] == exproto->WaitForKeyEx, exproto, sproto); + return input_sequence(!use_sproto, exproto, sproto); } }