unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "Jan Djärv" <jan.h.d@swipnet.se>
To: Paul Eggert <eggert@cs.ucla.edu>
Cc: 8410@debbugs.gnu.org
Subject: bug#8410: make_invisible_cursor returns garbage if	XCreateBitmapFromData fails
Date: Sat, 02 Apr 2011 08:45:06 +0200	[thread overview]
Message-ID: <4D96C5F2.9020802@swipnet.se> (raw)
In-Reply-To: <4D96882E.3020002@cs.ucla.edu>

It looks OK.  But there are lots of places in Emacs where errors and return 
values from X calls are not checked.  make_gc in the same file comes to mind.
If anything goes wrong there, emacs crashes on an X protocol error message.

If there is an error here it means the X server is out of memory, so Emacs 
will probably crash on another X call later on anyway.  But if you want to get 
rid of the gcc warning, your patch is correct.  If Emacs somehow survives
a bit longer, returning 0 means that the invisible cursor functionality will 
not work, the cursor will not become invisible.

	Jan D.

Paul Eggert skrev 2011-04-02 04.21:
> I found this bug via static analysis, using GCC 4.6.0's warnings.
> src/xfns.c's make_invisible_cursor returns a garbage value if
> XCreateBitmapFromData fails.  I plan to fix it as follows.
> I don't know that returning 0 fixes the bug, so I'd like someone
> who's expert in this area to look at this.  Since the patch replaces
> undefined behavior with defined behavior it isn't likely to be
> introducing a bug, so it shouldn't hurt to install the patch.
>
> * xfns.c (make_invisible_cursor): Don't return garbage
> if XCreateBitmapFromData fails.
> === modified file 'src/xfns.c'
> --- src/xfns.c	2011-04-01 20:30:45 +0000
> +++ src/xfns.c	2011-04-01 23:01:33 +0000
> @@ -855,19 +855,20 @@
>     static char const no_data[] = { 0 };
>     Pixmap pix;
>     XColor col;
> -  Cursor c;
> +  Cursor c = 0;
>
>     x_catch_errors (dpy);
>     pix = XCreateBitmapFromData (dpy, FRAME_X_DISPLAY_INFO (f)->root_window,
>                                  no_data, 1, 1);
>     if (! x_had_errors_p (dpy)&&  pix != None)
>       {
> +      Cursor pixc;
>         col.pixel = 0;
>         col.red = col.green = col.blue = 0;
>         col.flags = DoRed | DoGreen | DoBlue;
> -      c = XCreatePixmapCursor (dpy, pix, pix,&col,&col, 0, 0);
> -      if (x_had_errors_p (dpy) || c == None)
> -        c = 0;
> +      pixc = XCreatePixmapCursor (dpy, pix, pix,&col,&col, 0, 0);
> +      if (! x_had_errors_p (dpy)&&  pixc != None)
> +        c = pixc;
>         XFreePixmap (dpy, pix);
>       }
>
>
>
>





  reply	other threads:[~2011-04-02  6:45 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-02  2:21 bug#8410: make_invisible_cursor returns garbage if XCreateBitmapFromData fails Paul Eggert
2011-04-02  6:45 ` Jan Djärv [this message]
2011-04-06  5:47 ` bug#8410: fix installed in trunk Paul Eggert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D96C5F2.9020802@swipnet.se \
    --to=jan.h.d@swipnet.se \
    --cc=8410@debbugs.gnu.org \
    --cc=eggert@cs.ucla.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).