Package: rxvt
Version: 1:2.6.4-9
Severity: normal
Tags: patch
When pasting the X11 selection into Sun's Java implementation,
specifically:
java version "1.5.0_05"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_05-b05)
Java HotSpot(TM) Client VM (build 1.5.0_05-b05, mixed mode, sharing)
... but probably any Sun implementation and possibly others, the paste
fails to have any effect except that the Sun JVM shared library outputs
this message, or similar, on stderr:
Atom was -6276164
This behavior doesn't happen on the i386 architecture but does on the
amd64 architecture.
The cause is the incorrect size of the elements in the target_list array
passed to XChangeProperty in screen.c. This has been rectified in the
CVS version of rxvt with the following patch:
http://cvs.sourceforge.net/viewcvs.py/rxvt/rxvt/src/screen.c?r1=1.267&r2=1.268
The check-in comment says:
Try to deal with systems which don't use an internal Atom
size of 32 bits more nicely
Although this does indeed make the code nicer, it also makes it correct.
Atom is a 64 bit type in the amd64 architecture but, when passing
XA_ATOM arguments to XChangeProperty, one must use a "format" argument
of 32 but pass an array of 64 bit Atoms to the function.
Well, that's my belief, which I can substantiate with snippets of other
applications which don't suffer from this problem and extracts from
Xlibint.[hc] and ChProp.c from the X distribution as required.
Hopefully reportbug is about to ask me for the filename of my patch for
rxvt-2.6.4.
-- System Information:
Debian Release: testing/unstable
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable')
Architecture: amd64 (x86_64)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.6.14-2-amd64-k8
Locale: LANG=en_GB, LC_CTYPE=en_GB (charmap=ISO-8859-1)
Versions of packages rxvt depends on:
ii base-passwd 3.5.10 Debian base system master password
ii libc6 2.3.5-7 GNU C Library: Shared libraries an
ii libx11-6 6.8.2.dfsg.1-10 X Window System protocol client li
ii xlibs 6.8.2.dfsg.1-10 X Window System client libraries m
rxvt recommends no packages.
-- no debconf information
*********************************************************************************
This email and any attachment is confidential. It may only be read, copied
and used by the intended recipient(s). If you are not the intended recipient
(s), you may not copy, use, distribute, forward, store or disclose this e-mail
or any attachment. If you are not the intended recipient(s) or have otherwise
received this e-mail in error, you should destroy it and any attachment and
notify the sender by reply e-mail or send a message to: [EMAIL PROTECTED]
*********************************************************************************
--- screen.c-2.6.4 2005-11-25 15:37:15.000000000 -0800
+++ screen.c 2005-11-28 23:00:52.000000000 -0800
@@ -3403,14 +3403,6 @@
/* ------------------------------------------------------------------------- */
/*
- * On some systems, the Atom typedef is 64 bits wide. We need to have a type
- * that is exactly 32 bits wide, because a format of 64 is not allowed by
- * the X11 protocol.
- */
-typedef CARD32 Atom32;
-
-/* ------------------------------------------------------------------------- */
-/*
* Respond to a request for our current selection
* EXT: SelectionRequest
*/
@@ -3419,7 +3411,7 @@
selection_send(const XSelectionRequestEvent * rq)
{
XEvent ev;
- Atom32 target_list[4];
+ Atom target_list[4];
Atom target;
static Atom xa_targets = None;
static Atom xa_compound_text = None;
@@ -3444,13 +3436,12 @@
ev.xselection.time = rq->time;
if (rq->target == xa_targets) {
- target_list[0] = (Atom32) xa_targets;
- target_list[1] = (Atom32) XA_STRING;
- target_list[2] = (Atom32) xa_text;
- target_list[3] = (Atom32) xa_compound_text;
+ target_list[0] = xa_targets;
+ target_list[1] = XA_STRING;
+ target_list[2] = xa_text;
+ target_list[3] = xa_compound_text;
XChangeProperty(Xdisplay, rq->requestor, rq->property, rq->target,
- (8 * sizeof(target_list[0])), PropModeReplace,
- (unsigned char *)target_list,
+ 32, PropModeReplace, (unsigned char *)target_list,
(sizeof(target_list) / sizeof(target_list[0])));
ev.xselection.property = rq->property;
} else if (rq->target == XA_STRING