diff options
author | Jan Djärv <jan.h.d@swipnet.se> | 2014-09-07 19:31:39 +0200 |
---|---|---|
committer | Jan Djärv <jan.h.d@swipnet.se> | 2014-09-07 19:31:39 +0200 |
commit | eee8ec84426af080d82f37ab0280bd96ae6091bd (patch) | |
tree | 14fa3172984bd3c441eb68c156ceb1c6c94cd4e8 /src | |
parent | 970d21e8e6aa7e5bafd3f025f66d694b5ae06ba5 (diff) | |
download | emacs-eee8ec84426af080d82f37ab0280bd96ae6091bd.tar.gz |
* xselect.c (x_fill_property_data): Handle negative XCDR when data
is CONSP.
Fixes: debbugs:18303
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/xselect.c | 19 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index acb8eed4722..ef130f8217e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2014-09-07 Jan Djärv <jan.h.d@swipnet.se> + + * xselect.c (x_fill_property_data): Handle negative XCDR when data + is CONSP (Bug#18303). + 2014-09-07 Eli Zaretskii <eliz@gnu.org> * callproc.c (child_setup) [WINDOWSNT]: Don't call exec_failed if diff --git a/src/xselect.c b/src/xselect.c index 23310b0f867..ed359849be4 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -2299,7 +2299,24 @@ x_fill_property_data (Display *dpy, Lisp_Object data, void *ret, int format) Lisp_Object o = XCAR (iter); if (INTEGERP (o) || FLOATP (o) || CONSP (o)) - val = cons_to_signed (o, LONG_MIN, LONG_MAX); + { + if (CONSP (o) && INTEGERP (XCAR (o)) && INTEGERP (XCDR (o))) + { + intmax_t v1 = XINT (XCAR (o)); + intmax_t v2 = XINT (XCDR (o)); + /* cons_to_signed does not handle negative values for v2. + For XDnd, v2 might be y of a window, and can be negative. + The XDnd spec. is not explicit about negative values, + but lets do what it says. + */ + if (v1 < 0 || v2 < 0) + val = (v1 << 16) | v2; + else + val = cons_to_signed (o, LONG_MIN, LONG_MAX); + } + else + val = cons_to_signed (o, LONG_MIN, LONG_MAX); + } else if (STRINGP (o)) { block_input (); |