From d83404e41808421442c8257392ecd095042cbfbf Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Fri, 7 Sep 2018 13:49:54 +0200 Subject: [PATCH] Cygwin: console: make sure EnumFontFamiliesExW loop isn't infinite The current loop condition is borderline. Make sure it ends and choose a replacement char in the unlikely case the current console font isn't recognized at all. Signed-off-by: Corinna Vinschen --- winsup/cygwin/fhandler_console.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index ce6de6feb..6a0d640a8 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -2016,10 +2016,16 @@ check_font (HANDLE hdl) do { EnumFontFamiliesExW (cdc, &lf, enum_proc, (LPARAM) &done, 0); - if (!done && cp > lf.lfFaceName) + if (!done) *cp-- = L'\0'; } - while (!done); + while (!done && cp >= lf.lfFaceName); + /* What, really? No recognizable font? */ + if (!done) + { + rp_char = L'?'; + return; + } /* Yes. Check for the best replacement char. */ HFONT f = CreateFontW (0, 0, 0, 0, cfi.FontWeight, FALSE, FALSE, FALSE,