]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug #12025 with a crash when displaying tooltips.
authorEli Zaretskii <eliz@gnu.org>
Mon, 23 Jul 2012 16:57:20 +0000 (19:57 +0300)
committerEli Zaretskii <eliz@gnu.org>
Mon, 23 Jul 2012 16:57:20 +0000 (19:57 +0300)
 src/print.c (print_object): Don't crash when a frame's name is nil
 or invalid.
 src/window.c (decode_any_window): Disable CHECK_LIVE_FRAME test, as
 it signals an error when a tooltip frame is being created.

src/ChangeLog
src/print.c
src/window.c

index fb25d8dc9379f5336b4ae7e3d46cad5381d35b81..40654e5a492c4ee40d4e7459d468d464e6c35cbf 100644 (file)
@@ -1,3 +1,11 @@
+2012-07-23  Eli Zaretskii  <eliz@gnu.org>
+
+       * print.c (print_object): Don't crash when a frame's name is nil
+       or invalid.  (Bug#12025)
+
+       * window.c (decode_any_window): Disable CHECK_LIVE_FRAME test, as
+       it signals an error when a tooltip frame is being created.
+
 2012-07-23  Dmitry Antipov  <dmantipov@yandex.ru>
 
        Cleanup miscellaneous objects allocation and initialization.
index b650b1265b1d203167ce257e08a6ea802035af88..fc435efe7c582791264c3e551ecf376269d7f408 100644 (file)
@@ -1897,10 +1897,21 @@ print_object (Lisp_Object obj, register Lisp_Object printcharfun, int escapeflag
       else if (FRAMEP (obj))
        {
          int len;
+         Lisp_Object frame_name = XFRAME (obj)->name;
+
          strout ((FRAME_LIVE_P (XFRAME (obj))
                   ? "#<frame " : "#<dead frame "),
                  -1, -1, printcharfun);
-         print_string (XFRAME (obj)->name, printcharfun);
+         if (!STRINGP (frame_name))
+           {
+             /* A frame could be too young and have no name yet;
+                don't crash.  */
+             if (SYMBOLP (frame_name))
+               frame_name = Fsymbol_name (frame_name);
+             else      /* can't happen: name should be either nil or string */
+               frame_name = build_string ("*INVALID*FRAME*NAME*");
+           }
+         print_string (frame_name, printcharfun);
          len = sprintf (buf, " %p", XFRAME (obj));
          strout (buf, len, len, printcharfun);
          PRINTCHAR ('>');
index b7b6e283cc1780fcb106e6ec29547884db4a0e42..e80462ae945d67869503b97cdd6517b8f8bdf132 100644 (file)
@@ -151,7 +151,8 @@ decode_any_window (register Lisp_Object window)
 
   CHECK_WINDOW (window);
   w = XWINDOW (window);
-  CHECK_LIVE_FRAME (w->frame);
+  /* The following test throws up every time a tooltip frame is displayed.  */
+  /* CHECK_LIVE_FRAME (w->frame); */
   return w;
 }