From e1bf05c1fbf63087801c242208212df133921ed1 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Tue, 13 Nov 2012 21:06:44 +0900 Subject: [PATCH] font.c (font_unparse_xlfd): Exclude special characters from the generating XLFD name. --- src/ChangeLog | 5 +++++ src/font.c | 17 +++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 1daeb7bc0b6..efe5e59cb73 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-11-13 Kenichi Handa + + * font.c (font_unparse_xlfd): Exclude special characters from the + generating XLFD name. + 2012-11-06 Dmitry Antipov * window.c (quad): New function. diff --git a/src/font.c b/src/font.c index e960f9b3d13..1ec5929506e 100644 --- a/src/font.c +++ b/src/font.c @@ -1185,7 +1185,7 @@ ptrdiff_t font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes) { char *p; - const char *f[XLFD_REGISTRY_INDEX + 1]; + char *f[XLFD_REGISTRY_INDEX + 1]; Lisp_Object val; int i, j, len; @@ -1234,8 +1234,21 @@ font_unparse_xlfd (Lisp_Object font, int pixel_size, char *name, int nbytes) f[j] = "*"; else { + int c, k, l; + ptrdiff_t alloc; + val = SYMBOL_NAME (val); - f[j] = SSDATA (val); + alloc = SBYTES (val) + 1; + if (nbytes <= alloc) + return -1; + f[j] = alloca (alloc); + /* Copy the name while excluding '-', '?', ',', and '"'. */ + for (k = l = 0; k < alloc; k++) + { + c = SREF (val, k); + if (c != '-' && c != '?' && c != ',' && c != '"') + f[j][l++] = c; + } } } -- 2.39.5