This is the mail archive of the cygwin-cvs@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[newlib-cygwin] Cygwin: console: make sure EnumFontFamiliesExW loop isn't infinite


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,


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]