Date: Thu, 21 Apr 2011 08:26:29 GMT From: Marcin Cieslak <saper@saper.info> To: FreeBSD-gnats-submit@FreeBSD.org Cc: akosela@andykosela.com Subject: ports/156542: [PATCH] x11/rxvt: don't crash on paste from non-ICCCM clients Message-ID: <201104210826.p3L8QTcs020944@radziecki.saper.info> Resent-Message-ID: <201104210830.p3L8UBfn069282@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 156542 >Category: ports >Synopsis: [PATCH] x11/rxvt: don't crash on paste from non-ICCCM clients >Confidential: no >Severity: serious >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Apr 21 08:30:11 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Marcin Cieslak >Release: FreeBSD 9.0-CURRENT amd64 >Organization: http://saper.info >Environment: System: FreeBSD radziecki.saper.info 9.0-CURRENT FreeBSD 9.0-CURRENT #1 r219785M: Mon Mar 21 11:40:40 CET >Description: Some clients that are sending NONE as property in their ConvertSelection request: ............REQUEST: ConvertSelection sequence number: 012c request length: 0006 requestor: WIN 0260000d selection: <PRIMARY> target: <STRING> property: <NONE> time: CurrentTime ..............EVENT: SelectionRequest sequence number: 0208 time: CurrentTime owner: WIN 02400008 requestor: WIN 0260000d selection: <PRIMARY> target: <STRING> property: <NONE> ..............ERROR: Atom Receipt of SelectionRequest with <NONE> property causes rxvt derivatives to crash with BadAtom error. ICCCM says, that only obsolete clients should behave like this, and t recommends that clients owning selection should use the target atom as the property name. (see http://tronche.com/gui/x/icccm/sec-2.html#s-2.2) xterm is handling this, but rxvt and derivatives do not. Submitted upstream: (rxvt) https://sourceforge.net/tracker/?func=detail&aid=3289852&group_id=221&atid=100221 (rxvt-unicode) http://thread.gmane.org/gmane.comp.terminal-emulators.rxvt-unicode.general/958 Added file(s): - files/patch-screen.c Port maintainer (akosela@andykosela.com) is cc'd. Generated with FreeBSD Port Tools 0.99 >How-To-Repeat: Paste from rxvt into comms/syncterm or one of the clients described in: http://michael.toren.net/mirrors/doc/X-copy+paste.txt >Fix: --- rxvt-2.6.4_5.patch begins here --- diff -ruN --exclude=CVS /usr/ports/x11/rxvt.orig/files/patch-screen.c /usr/ports/x11/rxvt/files/patch-screen.c --- /usr/ports/x11/rxvt.orig/files/patch-screen.c 1970-01-01 01:00:00.000000000 +0100 +++ /usr/ports/x11/rxvt/files/patch-screen.c 2011-04-21 09:01:13.000000000 +0200 @@ -0,0 +1,52 @@ +--- src/screen.c.orig 2011-04-21 08:56:56.000000000 +0200 ++++ src/screen.c 2011-04-21 08:59:19.000000000 +0200 +@@ -3359,6 +3359,7 @@ + XEvent ev; + Atom32 target_list[4]; + Atom target; ++ Atom property; + static Atom xa_targets = None; + static Atom xa_compound_text = None; + static Atom xa_text = None; +@@ -3381,16 +3382,26 @@ + ev.xselection.target = rq->target; + ev.xselection.time = rq->time; + ++ /* ICCCM: 2.2. Responsibilities of the Selection Owner ++ * SelectionRequest: ++ * If the specified property is None , the requestor ++ * an obsolete client. Owners are encouraged ++ * to support these clients by using the specified ++ * target atom as the property name to be used for ++ * the reply. ++ */ ++ property = (rq->property == 0) ? rq->target : rq->property; ++ + 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; +- XChangeProperty(Xdisplay, rq->requestor, rq->property, rq->target, ++ XChangeProperty(Xdisplay, rq->requestor, property, rq->target, + (8 * sizeof(target_list[0])), PropModeReplace, + (unsigned char *)target_list, + (sizeof(target_list) / sizeof(target_list[0]))); +- ev.xselection.property = rq->property; ++ ev.xselection.property = property; + } else if (rq->target == XA_STRING + || rq->target == xa_compound_text + || rq->target == xa_text) { +@@ -3404,10 +3415,10 @@ + } + cl[0] = selection.text; + XmbTextListToTextProperty(Xdisplay, cl, 1, style, &ct); +- XChangeProperty(Xdisplay, rq->requestor, rq->property, ++ XChangeProperty(Xdisplay, rq->requestor, property, + target, 8, PropModeReplace, + ct.value, ct.nitems); +- ev.xselection.property = rq->property; ++ ev.xselection.property = property; + } + XSendEvent(Xdisplay, rq->requestor, False, 0, &ev); + } --- rxvt-2.6.4_5.patch ends here --- >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104210826.p3L8QTcs020944>