pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/38988 (was: [PATCH] upgrade rxvt-unicode to 9.05)



   Date: Tue, 19 Aug 2008 09:01:17 +0900
   From: "OBATA Akio" <obache%netbsd.org@localhost>

   Can you also note this patch in GNATS PR pkg/38988?
   Just send to gnats-bugs%NetBSD.org@localhost with subject Re: pkg/38988.

Whoops!  Sorry, I knew I must have botched something, and that was
looking in the PRs.  Probably what I called patch-ac, for fixing
socket message ancillary data buffers, should be done separately.

The originator of pkg/38988 was right to omit the assignment of
CONFIGURE_ARGS from the Makefile; I agree with his assessment of all
the options there.  However:

- rxvt-unicode-9.05 still uses snprintf;

- it does not use Perl if the perl option is disabled;

- <http://dist.schmorp.de/rxvt-unicode/Attic/> should remain in the
  list of master sites, for when the next version of rxvt-unicode is
  released upstream (my understanding is that only the most recent
  release is in <http://dist.schmorp.de/rxvt-unicode/>, and that all
  the others are in the Attic/ subdirectory);

- <http://software.schmorp.de/pkg/rxvt-unicode.html>, as far as I can
  tell, is still the home page of urxvt, not
  <http://dist.schmorp.de/rxvt-unicode/>, which is where the files are
  released;

- patch-ab is still important, since rxvt-unicode has not changed
  upstream to fix the issue;

- I suspect that using the print-PLIST target will strip the
  ${PLIST.perl} directives in the PLIST, causing the problem the
  originator encountered with Perl files in the PLIST when installing
  with the perl option disabled; and, indeed,

- the PLIST need only omit lib/urxvt/perl/automove-background, as I
  mentioned in my original email (it was removed from, and its
  functionality folded into, rxvt-unicode-9.05).

I've created a revised patch for pkgsrc, and I have also separately
attached the patch for rxvt-unicode, which I formerly called patch-ac,
to fix the use of socket message ancillary data in src/fdpass.C.
(I'll file this as a separate PR, too, if that would be better; and
I'll also send it to the upstream urxvt author when I get a chance.)
Index: Makefile
===================================================================
RCS file: /cvsroot/pkgsrc/x11/rxvt-unicode/Makefile,v
retrieving revision 1.22
diff -u -r1.22 Makefile
--- Makefile    3 Apr 2008 22:36:52 -0000       1.22
+++ Makefile    19 Aug 2008 01:22:49 -0000
@@ -1,8 +1,7 @@
 # $NetBSD: Makefile,v 1.22 2008/04/03 22:36:52 tonnerre Exp $
 #
 
-DISTNAME=              rxvt-unicode-8.3
-PKGREVISION=           3
+DISTNAME=              rxvt-unicode-9.05
 CATEGORIES=            x11
 MASTER_SITES=          http://dist.schmorp.de/rxvt-unicode/ \
                        http://dist.schmorp.de/rxvt-unicode/Attic/
@@ -17,12 +16,11 @@
 USE_TOOLS+=            pkg-config
 USE_FEATURES+=         snprintf
 
-CONFIGURE_ARGS+=       --enable-transparency   \
-                       --enable-menubar        \
-                       --enable-xpm-background \
-                       --enable-xgetdefault    \
-                       --enable-24bit
-CONFIGURE_ENV+=                ac_cv_path_TIC=no
+# Setting this to `no' causes an error when doc/Makefile in 9.05 tries
+# to invoke it unconditionally.  Setting this to `:' causes nothing to
+# happen at all, and this is simpler than patching doc/Makefile.in to
+# revert the change that was made to it.
+CONFIGURE_ENV+=                ac_cv_path_TIC=:
 
 post-install:
        ${INSTALL_DATA_DIR} ${PREFIX}/share/doc/rxvt-unicode
Index: PLIST
===================================================================
RCS file: /cvsroot/pkgsrc/x11/rxvt-unicode/PLIST,v
retrieving revision 1.8
diff -u -r1.8 PLIST
--- PLIST       12 Apr 2008 22:43:15 -0000      1.8
+++ PLIST       19 Aug 2008 01:22:49 -0000
@@ -2,7 +2,6 @@
 bin/urxvt
 bin/urxvtc
 bin/urxvtd
-${PLIST.perl}lib/urxvt/perl/automove-background
 ${PLIST.perl}lib/urxvt/perl/block-graphics-to-ascii
 ${PLIST.perl}lib/urxvt/perl/digital-clock
 ${PLIST.perl}lib/urxvt/perl/example-refresh-hooks
Index: distinfo
===================================================================
RCS file: /cvsroot/pkgsrc/x11/rxvt-unicode/distinfo,v
retrieving revision 1.11
diff -u -r1.11 distinfo
--- distinfo    3 Apr 2008 22:36:52 -0000       1.11
+++ distinfo    19 Aug 2008 01:22:49 -0000
@@ -1,7 +1,7 @@
-$NetBSD: distinfo,v 1.11 2008/04/03 22:36:52 tonnerre Exp $
+$NetBSD$
 
-SHA1 (rxvt-unicode-8.3.tar.bz2) = cd335c47543ba086585a296ca0fe7445c07120dd
-RMD160 (rxvt-unicode-8.3.tar.bz2) = 000dbcb1ff297edbff0a8b21dbbba3db30854579
-Size (rxvt-unicode-8.3.tar.bz2) = 885212 bytes
-SHA1 (patch-aa) = e5760c57a6b47780ee851efe09dda5f2f02fca40
-SHA1 (patch-ab) = 2bfbffea8d63ebd65bfa9b0dc43a1901f844137e
+SHA1 (rxvt-unicode-9.05.tar.bz2) = 758d57a88c3521f780bcd21c70d3995f53a2f6e3
+RMD160 (rxvt-unicode-9.05.tar.bz2) = 0f4343a9aa0a8b26d10c6049c1afca2cc7569fc3
+Size (rxvt-unicode-9.05.tar.bz2) = 865815 bytes
+SHA1 (patch-aa) = 0b86573cb5b1ae71b4a36ffd62355329d45c98ed
+SHA1 (patch-ab) = 6a6991089f3caa20dc1725024fc72f1035bd901f
Index: patches/patch-aa
===================================================================
RCS file: /cvsroot/pkgsrc/x11/rxvt-unicode/patches/patch-aa,v
retrieving revision 1.5
diff -u -r1.5 patch-aa
--- patches/patch-aa    6 Aug 2007 10:02:27 -0000       1.5
+++ patches/patch-aa    19 Aug 2008 01:22:49 -0000
@@ -1,14 +1,15 @@
 $NetBSD: patch-aa,v 1.5 2007/08/06 10:02:27 ghen Exp $
 
---- configure.orig     2007-08-06 10:26:41.000000000 +0200
-+++ configure          2007-08-06 10:29:20.000000000 +0200
-@@ -3877,57 +3877,6 @@
+--- configure.orig     2008-05-05 16:49:02.000000000 +0000
++++ configure  2008-08-18 18:01:09.000000000 +0000
+@@ -3851,57 +3851,6 @@
+ fi
  LINKER=$LINKER
  
- 
+-
 -if test -z "$orig_CXXFLAGS"; then
 -  if test x$GCC = xyes && test "x$GXX" = xyes; then
--     CXXFLAGS="-g -O3 -fno-threadsafe-statics -fno-enforce-eh-specs"
+-    CXXFLAGS="-g -O3 -fno-rtti -fvisibility-inlines-hidden 
-fno-threadsafe-statics -fno-enforce-eh-specs"
 -    cat >conftest.$ac_ext <<_ACEOF
 -/* confdefs.h.  */
 -_ACEOF
@@ -56,26 +57,6 @@
 -  CFLAGS="$CXXFLAGS"
 -fi
 -
--
- cat >>confdefs.h <<\_ACEOF
- #define _GNU_SOURCE 1
- _ACEOF
-@@ -6691,11 +6640,16 @@
- cat >>conftest.$ac_ext <<_ACEOF
- /* end confdefs.h.  */
+ case $host in
+    *-*-solaris* )
  
-+extern "C" {
-+#include <X11/xpm.h>
-+#include <stddef.h>
-+}
-+
- int
- main ()
- {
--XpmReadFileToPixmap()
--  ;
-+  Drawable d;
-+  XpmReadFileToPixmap(NULL, d, NULL, NULL, NULL, NULL);
-   return 0;
- }
- _ACEOF
Index: patches/patch-ab
===================================================================
RCS file: /cvsroot/pkgsrc/x11/rxvt-unicode/patches/patch-ab,v
retrieving revision 1.4
diff -u -r1.4 patch-ab
--- patches/patch-ab    3 Apr 2008 22:36:52 -0000       1.4
+++ patches/patch-ab    19 Aug 2008 01:22:49 -0000
@@ -2,9 +2,9 @@
 
 Fix default display vulnerability (CVE-2008-1142).
 
---- src/init.C.orig    2007-08-01 19:35:02.000000000 +0200
-+++ src/init.C
-@@ -299,11 +299,13 @@ rxvt_term::init_resources (int argc, con
+--- src/init.C.orig    2008-06-15 13:50:33.000000000 +0000
++++ src/init.C 2008-08-18 17:37:41.000000000 +0000
+@@ -372,11 +372,13 @@ rxvt_term::init_resources (int argc, con
     * Open display, get options/resources and create the window
     */
  
@@ -18,5 +18,5 @@
 +    rxvt_fatal ("no display given and DISPLAY not set, aborting.\n");
 +
    if (!(display = displays.get (rs[Rs_display_name])))
-     rxvt_fatal ("can't open display %s, aborting.\n", rs[Rs_display_name]);
- 
+     {
+       free (r_argv);
--- src/fdpass.C.orig   2007-06-25 23:47:14.000000000 +0000
+++ src/fdpass.C        2008-08-09 00:41:29.000000000 +0000
@@ -26,6 +26,7 @@
 #include "../config.h"
 
 #include <cstddef> // needed by broken bsds for NULL used in sys/uio.h
+#include <cstdlib>
 
 #include <sys/types.h>
 #include <sys/uio.h>
@@ -33,7 +34,12 @@
 
 #include "libptytty.h"
 
-#ifndef CMSG_LEN // CMSG_SPACE && CMSG_LEN are rfc2292 extensions to unix
+// CMSG_SPACE & CMSG_LEN are rfc2292 extensions to unix
+#ifndef CMSG_SPACE
+# define CMSG_SPACE(len) (sizeof (cmsghdr) + len)
+#endif
+
+#ifndef CMSG_LEN
 # define CMSG_LEN(len) (sizeof (cmsghdr) + len)
 #endif
 
@@ -42,9 +48,13 @@ ptytty::send_fd (int socket, int fd)
 {
   msghdr msg;
   iovec iov;
-  char buf [CMSG_LEN (sizeof (int))];
+  void *buf;
+  cmsghdr *cmsg;
   char data = 0;
 
+  if ((buf = malloc (CMSG_SPACE (sizeof (int)))) == NULL)
+    return 0;
+
   iov.iov_base = &data;
   iov.iov_len  = 1;
 
@@ -52,19 +62,19 @@ ptytty::send_fd (int socket, int fd)
   msg.msg_namelen    = 0;
   msg.msg_iov        = &iov;
   msg.msg_iovlen     = 1;
-  msg.msg_control    = (void *)buf;
-  msg.msg_controllen = sizeof buf;
+  msg.msg_control    = buf;
+  msg.msg_controllen = CMSG_SPACE (sizeof (int));
 
-  cmsghdr *cmsg = CMSG_FIRSTHDR (&msg);
+  cmsg = CMSG_FIRSTHDR (&msg);
   cmsg->cmsg_level = SOL_SOCKET;
   cmsg->cmsg_type  = SCM_RIGHTS;
   cmsg->cmsg_len   = CMSG_LEN (sizeof (int));
 
   *(int *)CMSG_DATA (cmsg) = fd;
 
-  msg.msg_controllen = cmsg->cmsg_len;
-
-  return sendmsg (socket, &msg, 0) >= 0;
+  ssize_t result = sendmsg (socket, &msg, 0);
+  free (buf);
+  return result >= 0;
 }
 
 int
@@ -72,8 +82,13 @@ ptytty::recv_fd (int socket)
 {
   msghdr msg;
   iovec iov;
-  char buf [CMSG_LEN (sizeof (int))];  /* ancillary data buffer */
+  void *buf;
+  cmsghdr *cmsg;
   char data = 1;
+  int fd = -1;
+
+  if ((buf = malloc (CMSG_SPACE (sizeof (int)))) == NULL)
+    return -1;
 
   iov.iov_base = &data;
   iov.iov_len  = 1;
@@ -83,23 +98,23 @@ ptytty::recv_fd (int socket)
   msg.msg_iov        = &iov;
   msg.msg_iovlen     = 1;
   msg.msg_control    = buf;
-  msg.msg_controllen = sizeof buf;
-
-  cmsghdr *cmsg = CMSG_FIRSTHDR (&msg);
-  cmsg->cmsg_level = SOL_SOCKET;
-  cmsg->cmsg_type  = SCM_RIGHTS;
-  cmsg->cmsg_len   = CMSG_LEN (sizeof (int));
-
-  msg.msg_controllen = cmsg->cmsg_len;
+  msg.msg_controllen = CMSG_SPACE (sizeof (int));
 
   if (recvmsg (socket, &msg, 0) <= 0
       || data               != 0
-      || msg.msg_controllen < CMSG_LEN (sizeof (int))
-      || cmsg->cmsg_level   != SOL_SOCKET
+      || msg.msg_controllen < CMSG_SPACE (sizeof (int)))
+    goto exit;
+
+  cmsg = CMSG_FIRSTHDR (&msg);
+  if (cmsg->cmsg_level      != SOL_SOCKET
       || cmsg->cmsg_type    != SCM_RIGHTS
       || cmsg->cmsg_len     < CMSG_LEN (sizeof (int)))
-    return -1;
+    goto exit;
+
+  fd = *(int *)CMSG_DATA (cmsg);
 
-  return *(int *)CMSG_DATA (cmsg);
+ exit:
+  free (buf);
+  return fd;
 }
 


Home | Main Index | Thread Index | Old Index