[PATCH:libx11] parse_omit_name should increase num of fields before appending encoding

Hong Xu hong at topbug.net
Sun Mar 15 23:39:15 PDT 2015


parse_omit_name currently does not increase number of fields to 12 after
appending encoding, This does not lead to the correct font is a xlfd
like "-*-*-medium-r-*-*-33-*" is given.

Signed-off-by: Hong Xu <hong at topbug.net>

---
Please note that the "if" in this patch is replaced by "while". The
reason is that I found the commit 3d69b0a83e62f8f6fbd changed the
"while" to "if", which does not seems logically correct for me and
actually accidently "fixed" the bug
http://sourceware.org/bugzilla/show_bug.cgi?id=10948
---
 modules/om/generic/omGeneric.c | 30 ++++++++++++++----------------
 1 file changed, 14 insertions(+), 16 deletions(-)

diff --git a/modules/om/generic/omGeneric.c b/modules/om/generic/omGeneric.c
index a835f00d7989..f447eb30ef78 100644
--- a/modules/om/generic/omGeneric.c
+++ b/modules/om/generic/omGeneric.c
@@ -808,6 +808,20 @@ parse_omit_name(
 	break;
     }
 
+    last++;
+
+    /* This may mot be needed anymore as XListFonts() takes care of this */
+    while (num_fields < 12) {
+	if ((last - buf) > (XLFD_MAX_LEN - 2))
+	    return -1;
+	*last = '*';
+	*(last + 1) = '-';
+	num_fields++;
+	last+=2;
+	if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL)
+	    return True;
+    }
+
    /* At this point, "last" is pointing to the last "-" in the
     * xlfd, and all xlfd's at this point take a form similar to:
     *       -*-*-*-*-*-*-14-*-*-*-*-*-
@@ -819,8 +833,6 @@ parse_omit_name(
     * we've found a match.
     */
 
-    last++;
-
     if ((last - buf) + strlen(font_data->name) > XLFD_MAX_LEN)
 	return -1;
 
@@ -828,20 +840,6 @@ parse_omit_name(
     if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL)
 	return True;
 
-    /* This may mot be needed anymore as XListFonts() takes care of this */
-    if (num_fields < 12) {
-	if ((last - buf) > (XLFD_MAX_LEN - 2))
-	    return -1;
-	*last = '*';
-	*(last + 1) = '-';
-	strcpy(last + 2, font_data->name);
-	num_fields++;
-	last+=2;
-	if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL)
-	    return True;
-    }
-
-
     return False;
 }
 
-- 
2.3.3




More information about the xorg-devel mailing list