diff options
| author | Paul Eggert | 2011-08-04 19:15:35 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-08-04 19:15:35 -0700 |
| commit | 0065d05491ce5981ea20896bb26d21dcd31e6769 (patch) | |
| tree | 13240167319d4a99ab5eacae4a883258eb2d28de /src/xselect.c | |
| parent | 18ab493650d648ab8dca651ea2698861f926e895 (diff) | |
| download | emacs-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.c | 24 |
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++) |