aboutsummaryrefslogtreecommitdiffstats
path: root/src/xselect.c
diff options
context:
space:
mode:
authorPaul Eggert2011-08-04 19:15:35 -0700
committerPaul Eggert2011-08-04 19:15:35 -0700
commit0065d05491ce5981ea20896bb26d21dcd31e6769 (patch)
tree13240167319d4a99ab5eacae4a883258eb2d28de /src/xselect.c
parent18ab493650d648ab8dca651ea2698861f926e895 (diff)
downloademacs-0065d05491ce5981ea20896bb26d21dcd31e6769.tar.gz
emacs-0065d05491ce5981ea20896bb26d21dcd31e6769.zip
Adjust in response to jan.h.d's comments.
See, for example <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9196#26>.
Diffstat (limited to 'src/xselect.c')
-rw-r--r--src/xselect.c24
1 files changed, 6 insertions, 18 deletions
diff --git a/src/xselect.c b/src/xselect.c
index d8b7b077a8c..5c2e12c5ef1 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -1503,17 +1503,9 @@ receive_incremental_selection (Display *display, Window window, Atom property,
1503 UNBLOCK_INPUT; 1503 UNBLOCK_INPUT;
1504 1504
1505 if (*size_bytes_ret - offset < tmp_size_bytes) 1505 if (*size_bytes_ret - offset < tmp_size_bytes)
1506 { 1506 *data_ret = xpalloc (*data_ret, size_bytes_ret,
1507 ptrdiff_t size; 1507 tmp_size_bytes - (*size_bytes_ret - offset),
1508 if (min (PTRDIFF_MAX, SIZE_MAX) - offset < tmp_size_bytes) 1508 -1, 1);
1509 {
1510 xfree (tmp_data);
1511 memory_full (SIZE_MAX);
1512 }
1513 size = offset + tmp_size_bytes;
1514 *data_ret = (unsigned char *) xrealloc (*data_ret, size);
1515 *size_bytes_ret = size;
1516 }
1517 1509
1518 memcpy ((*data_ret) + offset, tmp_data, tmp_size_bytes); 1510 memcpy ((*data_ret) + offset, tmp_data, tmp_size_bytes);
1519 offset += tmp_size_bytes; 1511 offset += tmp_size_bytes;
@@ -1806,14 +1798,12 @@ lisp_data_to_selection_data (Display *display, Lisp_Object obj,
1806 if (SYMBOLP (XVECTOR (obj)->contents [0])) 1798 if (SYMBOLP (XVECTOR (obj)->contents [0]))
1807 /* This vector is an ATOM set */ 1799 /* This vector is an ATOM set */
1808 { 1800 {
1809 if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof (Atom) < size)
1810 memory_full (SIZE_MAX);
1811 if (NILP (type)) type = QATOM; 1801 if (NILP (type)) type = QATOM;
1812 for (i = 0; i < size; i++) 1802 for (i = 0; i < size; i++)
1813 if (!SYMBOLP (XVECTOR (obj)->contents [i])) 1803 if (!SYMBOLP (XVECTOR (obj)->contents [i]))
1814 signal_error ("All elements of selection vector must have same type", obj); 1804 signal_error ("All elements of selection vector must have same type", obj);
1815 1805
1816 *data_ret = (unsigned char *) xmalloc (size * sizeof (Atom)); 1806 *data_ret = xnmalloc (size, sizeof (Atom));
1817 *format_ret = 32; 1807 *format_ret = 32;
1818 *size_ret = size; 1808 *size_ret = size;
1819 for (i = 0; i < size; i++) 1809 for (i = 0; i < size; i++)
@@ -1824,7 +1814,7 @@ lisp_data_to_selection_data (Display *display, Lisp_Object obj,
1824 /* This vector is an INTEGER set, or something like it */ 1814 /* This vector is an INTEGER set, or something like it */
1825 { 1815 {
1826 int format = 16; 1816 int format = 16;
1827 int data_size = 2; 1817 int data_size = sizeof (short);
1828 if (NILP (type)) type = QINTEGER; 1818 if (NILP (type)) type = QINTEGER;
1829 for (i = 0; i < size; i++) 1819 for (i = 0; i < size; i++)
1830 if (X_USHRT_MAX 1820 if (X_USHRT_MAX
@@ -1836,9 +1826,7 @@ lisp_data_to_selection_data (Display *display, Lisp_Object obj,
1836 data_size = sizeof (long); 1826 data_size = sizeof (long);
1837 format = 32; 1827 format = 32;
1838 } 1828 }
1839 if (min (PTRDIFF_MAX, SIZE_MAX) / data_size < size) 1829 *data_ret = xnmalloc (size, data_size);
1840 memory_full (SIZE_MAX);
1841 *data_ret = (unsigned char *) xmalloc (size * data_size);
1842 *format_ret = format; 1830 *format_ret = format;
1843 *size_ret = size; 1831 *size_ret = size;
1844 for (i = 0; i < size; i++) 1832 for (i = 0; i < size; i++)