[newlib-cygwin] Cygwin: console: make sure EnumFontFamiliesExW loop isn't infinite
Corinna Vinschen
corinna@sourceware.org
Fri Sep 7 11:50:00 GMT 2018
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=d83404e41808421442c8257392ecd095042cbfbf
commit d83404e41808421442c8257392ecd095042cbfbf
Author: Corinna Vinschen <corinna@vinschen.de>
Date: Fri Sep 7 13:49:54 2018 +0200
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 <corinna@vinschen.de>
Diff:
---
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 ce6de6f..6a0d640 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,
More information about the Cygwin-cvs
mailing list