]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix unlikely null pointer dereference
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 27 May 2022 18:44:34 +0000 (11:44 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 27 May 2022 18:45:01 +0000 (11:45 -0700)
* src/xselect.c (Fx_get_atom_name): Fix unlikely core dump when
build_string is called on a null pointer.  Found by GCC -fanalyzer.

src/xselect.c

index ae15fecccc590a9408cedbd5215447768039acf3..3f35842daa08f9893171e91efb22b921ed11de26 100644 (file)
@@ -2454,9 +2454,6 @@ If the value is 0 or the atom is not known, return the empty string.  */)
   (Lisp_Object value, Lisp_Object frame)
 {
   struct frame *f = decode_window_system_frame (frame);
-  char *name = 0;
-  char empty[] = "";
-  Lisp_Object ret = Qnil;
   Display *dpy = FRAME_X_DISPLAY (f);
   struct x_display_info *dpyinfo;
   Atom atom;
@@ -2468,17 +2465,16 @@ If the value is 0 or the atom is not known, return the empty string.  */)
 
   block_input ();
   x_catch_errors (dpy);
-  name = (atom ? x_get_atom_name (dpyinfo, atom,
-                                 &need_sync) : empty);
+  char *name = atom ? x_get_atom_name (dpyinfo, atom, &need_sync) : NULL;
   had_errors_p = need_sync && x_had_errors_p (dpy);
   x_uncatch_errors_after_check ();
-
-  if (!had_errors_p)
-    ret = build_string (name);
-
-  if (atom && name) xfree (name);
-  if (NILP (ret)) ret = empty_unibyte_string;
-
+  Lisp_Object ret = empty_unibyte_string;
+  if (name)
+    {
+      if (!had_errors_p)
+       ret = build_string (name);
+      xfree (name);
+    }
   unblock_input ();
 
   return ret;