aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2011-08-29 12:58:56 -0700
committerPaul Eggert2011-08-29 12:58:56 -0700
commit670741ab04da51fa86058b6a88f0923adfcea1b2 (patch)
tree49e1671092bec25c27dec0647387df1e7e09ef00 /src
parent80f2e268a31679c363e0fa2c660d8dca53871aed (diff)
downloademacs-670741ab04da51fa86058b6a88f0923adfcea1b2.tar.gz
emacs-670741ab04da51fa86058b6a88f0923adfcea1b2.zip
* xfaces.c (x_update_menu_appearance): Don't overrun buffer
if X resource line is longer than 512 bytes.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog3
-rw-r--r--src/xfaces.c35
2 files changed, 24 insertions, 14 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 97d1ea08db1..aeb984ee8df 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -91,6 +91,9 @@
91 * term.c (produce_glyphless_glyph): Make sprintf buffer a bit bigger 91 * term.c (produce_glyphless_glyph): Make sprintf buffer a bit bigger
92 to avoid potential buffer overrun. 92 to avoid potential buffer overrun.
93 93
94 * xfaces.c (x_update_menu_appearance): Don't overrun buffer
95 if X resource line is longer than 512 bytes.
96
942011-08-26 Paul Eggert <eggert@cs.ucla.edu> 972011-08-26 Paul Eggert <eggert@cs.ucla.edu>
95 98
96 Integer and memory overflow issues (Bug#9196). 99 Integer and memory overflow issues (Bug#9196).
diff --git a/src/xfaces.c b/src/xfaces.c
index 431ca07b8df..47d55f4da4b 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -3549,6 +3549,8 @@ x_update_menu_appearance (struct frame *f)
3549 rdb != NULL)) 3549 rdb != NULL))
3550 { 3550 {
3551 char line[512]; 3551 char line[512];
3552 char *buf = line;
3553 ptrdiff_t bufsize = sizeof line;
3552 Lisp_Object lface = lface_from_face_name (f, Qmenu, 1); 3554 Lisp_Object lface = lface_from_face_name (f, Qmenu, 1);
3553 struct face *face = FACE_FROM_ID (f, MENU_FACE_ID); 3555 struct face *face = FACE_FROM_ID (f, MENU_FACE_ID);
3554 const char *myname = SSDATA (Vx_resource_name); 3556 const char *myname = SSDATA (Vx_resource_name);
@@ -3561,24 +3563,25 @@ x_update_menu_appearance (struct frame *f)
3561 3563
3562 if (STRINGP (LFACE_FOREGROUND (lface))) 3564 if (STRINGP (LFACE_FOREGROUND (lface)))
3563 { 3565 {
3564 sprintf (line, "%s.%s*foreground: %s", 3566 exprintf (&buf, &bufsize, line, -1, "%s.%s*foreground: %s",
3565 myname, popup_path, 3567 myname, popup_path,
3566 SDATA (LFACE_FOREGROUND (lface))); 3568 SDATA (LFACE_FOREGROUND (lface)));
3567 XrmPutLineResource (&rdb, line); 3569 XrmPutLineResource (&rdb, line);
3568 sprintf (line, "%s.pane.menubar*foreground: %s", 3570 exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*foreground: %s",
3569 myname, SDATA (LFACE_FOREGROUND (lface))); 3571 myname, SDATA (LFACE_FOREGROUND (lface)));
3570 XrmPutLineResource (&rdb, line); 3572 XrmPutLineResource (&rdb, line);
3571 changed_p = 1; 3573 changed_p = 1;
3572 } 3574 }
3573 3575
3574 if (STRINGP (LFACE_BACKGROUND (lface))) 3576 if (STRINGP (LFACE_BACKGROUND (lface)))
3575 { 3577 {
3576 sprintf (line, "%s.%s*background: %s", 3578 exprintf (&buf, &bufsize, line, -1, "%s.%s*background: %s",
3577 myname, popup_path, 3579 myname, popup_path,
3578 SDATA (LFACE_BACKGROUND (lface))); 3580 SDATA (LFACE_BACKGROUND (lface)));
3579 XrmPutLineResource (&rdb, line); 3581 XrmPutLineResource (&rdb, line);
3580 sprintf (line, "%s.pane.menubar*background: %s", 3582
3581 myname, SDATA (LFACE_BACKGROUND (lface))); 3583 exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*background: %s",
3584 myname, SDATA (LFACE_BACKGROUND (lface)));
3582 XrmPutLineResource (&rdb, line); 3585 XrmPutLineResource (&rdb, line);
3583 changed_p = 1; 3586 changed_p = 1;
3584 } 3587 }
@@ -3616,11 +3619,12 @@ x_update_menu_appearance (struct frame *f)
3616#else 3619#else
3617 char *fontsetname = SSDATA (xlfd); 3620 char *fontsetname = SSDATA (xlfd);
3618#endif 3621#endif
3619 sprintf (line, "%s.pane.menubar*font%s: %s", 3622 exprintf (&buf, &bufsize, line, -1, "%s.pane.menubar*font%s: %s",
3620 myname, suffix, fontsetname); 3623 myname, suffix, fontsetname);
3621 XrmPutLineResource (&rdb, line); 3624 XrmPutLineResource (&rdb, line);
3622 sprintf (line, "%s.%s*font%s: %s", 3625
3623 myname, popup_path, suffix, fontsetname); 3626 exprintf (&buf, &bufsize, line, -1, "%s.%s*font%s: %s",
3627 myname, popup_path, suffix, fontsetname);
3624 XrmPutLineResource (&rdb, line); 3628 XrmPutLineResource (&rdb, line);
3625 changed_p = 1; 3629 changed_p = 1;
3626 if (fontsetname != SSDATA (xlfd)) 3630 if (fontsetname != SSDATA (xlfd))
@@ -3630,6 +3634,9 @@ x_update_menu_appearance (struct frame *f)
3630 3634
3631 if (changed_p && f->output_data.x->menubar_widget) 3635 if (changed_p && f->output_data.x->menubar_widget)
3632 free_frame_menubar (f); 3636 free_frame_menubar (f);
3637
3638 if (buf != line)
3639 xfree (buf);
3633 } 3640 }
3634} 3641}
3635 3642