diff src/select-x.c @ 5809:2f22818d92d4

#'x-store-cutbuffer-internal, correct order of type checks vs. member accesses src/ChangeLog addition: 2014-09-06 Aidan Kehoe <kehoea@parhasard.net> * select-x.c (Fx_store_cutbuffer_internal): Correct the order of XSTRING_{DATA,LENGTH} vs. CHECK_STRING, make sure the former is after the latter, avoiding crashes when passing in arguments of the wrong type, or when ERROR_CHECK_STRUCTURES is defined.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 06 Sep 2014 14:30:15 +0100
parents 79e9934779c1
children 574f0cded429
line wrap: on
line diff
--- a/src/select-x.c	Fri Aug 22 10:58:09 2014 +0100
+++ b/src/select-x.c	Sat Sep 06 14:30:15 2014 +0100
@@ -1379,9 +1379,8 @@
   Display *display = DEVICE_X_DISPLAY (d);
   Window window = RootWindow (display, 0); /* Cutbuffers are on frame 0 */
   Atom cut_buffer_atom;
-  const Ibyte *data  = XSTRING_DATA (string);
-  Bytecount bytes = XSTRING_LENGTH (string);
-  Bytecount bytes_remaining;
+  const Ibyte *data;
+  Bytecount bytes, bytes_remaining;
   Bytecount max_bytes = SELECTION_QUANTUM (display);
 #ifdef MULE
   const Ibyte *ptr, *end;
@@ -1393,7 +1392,10 @@
 
   CHECK_CUTBUFFER (cutbuffer);
   CHECK_STRING (string);
+
   cut_buffer_atom = symbol_to_x_atom (d, cutbuffer, 0);
+  data = XSTRING_DATA (string);
+  bytes = XSTRING_LENGTH (string);
 
   if (! cut_buffers_initialized)
     initialize_cut_buffers (display, window);