From 347563dcabc0523b027591ddc27266c951da31f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Fabian=20Silva=20Delgado?=
 <emulatorman@parabola.nu>
Date: Sun, 22 Feb 2015 11:13:47 -0200
Subject: xorg-server-1.17.1-2.parabola1: fix FS#43884 ->
 https://bugs.archlinux.org/task/43884, and partially FS#43867 ->
 https://bugs.archlinux.org/task/43867

---
 libre/xorg-server/PKGBUILD                         | 16 +++++++++---
 ...fix-regression-in-server-interpreted-auth.patch | 30 ++++++++++++++++++++++
 ...rver-Fix-a-crash-with-XDMCP-error-handler.patch | 23 +++++++++++++++++
 3 files changed, 65 insertions(+), 4 deletions(-)
 create mode 100644 libre/xorg-server/os-access-fix-regression-in-server-interpreted-auth.patch
 create mode 100644 libre/xorg-server/v2-xserver-Fix-a-crash-with-XDMCP-error-handler.patch

(limited to 'libre')

diff --git a/libre/xorg-server/PKGBUILD b/libre/xorg-server/PKGBUILD
index f6cd49ca3..23d5e83ec 100644
--- a/libre/xorg-server/PKGBUILD
+++ b/libre/xorg-server/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 231249 2015-02-11 08:34:18Z lcarlier $
+# $Id: PKGBUILD 231711 2015-02-21 13:38:48Z lcarlier $
 # Maintainer: AndyRTR <andyrtr@archlinux.org>
 # Maintainer: Jan de Groot <jgc@archlinux.org>
 # Maintainer (Parabola): Márcio Silva <coadde@parabola.nu>
@@ -6,7 +6,7 @@
 pkgbase=xorg-server
 pkgname=('xorg-server')
 pkgver=1.17.1
-pkgrel=1.parabola1 # build first with 0.1 and then rebuild it after xf86-input-evdev rebuild
+pkgrel=2.parabola1 # build first with 0.1 and then rebuild it after xf86-input-evdev rebuild
 arch=('i686' 'x86_64' 'mips64el')
 license=('custom')
 url="http://xorg.freedesktop.org"
@@ -19,16 +19,24 @@ makedepends=('pixman' 'libx11' 'mesa' 'mesa-libgl' 'xf86driproto' 'xcmiscproto'
              'libxshmfence') 
 source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2{,.sig}
         xvfb-run
-        xvfb-run.1)
+        xvfb-run.1
+        os-access-fix-regression-in-server-interpreted-auth.patch
+        v2-xserver-Fix-a-crash-with-XDMCP-error-handler.patch)
 validpgpkeys=('7B27A3F1A6E18CD9588B4AE8310180050905E40C'
               'C383B778255613DFDB409D91DB221A6900000011')
 sha256sums=('2bf8e9f6f0a710dec1d2472467bff1f4e247cb6dcd76eb469aafdc8a2d7db2ab'
             'SKIP'
             'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9'
-            '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776')
+            '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776'
+            '8a9d76eecf8795ca645fb1ce261733965578e953f6606153ce001a0e15d036e8'
+            'a73e33644682d9f430db987c192da0f7193907af50539669ebd59614a5ebd0f9')
 
 prepare() {
   cd "${pkgbase}-${pkgver}"
+  # fix FS#43884, not yet upstream
+  patch -Np1 -i ../os-access-fix-regression-in-server-interpreted-auth.patch
+  # partially fix FS#43867, not yet upstream
+  patch -Np1 -i ../v2-xserver-Fix-a-crash-with-XDMCP-error-handler.patch
 
   # fix os name:
   #Build Operating System = OSNAME="--kernel-name --kernel-release --machine" OSVENDOR=""
diff --git a/libre/xorg-server/os-access-fix-regression-in-server-interpreted-auth.patch b/libre/xorg-server/os-access-fix-regression-in-server-interpreted-auth.patch
new file mode 100644
index 000000000..b96bb7a31
--- /dev/null
+++ b/libre/xorg-server/os-access-fix-regression-in-server-interpreted-auth.patch
@@ -0,0 +1,30 @@
+diff --git a/os/access.c b/os/access.c
+index 28f2d32..fe6e831 100644
+--- a/os/access.c
++++ b/os/access.c
+@@ -1390,14 +1390,23 @@ InvalidHost(register struct sockaddr *saddr, int len, ClientPtr client)
+         else
+             return 0;
+     }
++
++    /* An empty address requires both a NULL addr *and* a zero length
++     * as the address comparison functions call memcmp with both
++     * parameters. Make sure they agree here
++     */
++    if (addr == NULL)
++        len = 0;
++    if (len == 0)
++        addr = NULL;
+     for (host = validhosts; host; host = host->next) {
+         if (host->family == FamilyServerInterpreted) {
+-            if (addr && siAddrMatch(family, addr, len, host, client)) {
++            if (siAddrMatch(family, addr, len, host, client)) {
+                 return 0;
+             }
+         }
+         else {
+-            if (addr && addrEqual(family, addr, len, host))
++            if (addrEqual(family, addr, len, host))
+                 return 0;
+         }
+
diff --git a/libre/xorg-server/v2-xserver-Fix-a-crash-with-XDMCP-error-handler.patch b/libre/xorg-server/v2-xserver-Fix-a-crash-with-XDMCP-error-handler.patch
new file mode 100644
index 000000000..02dbaf22f
--- /dev/null
+++ b/libre/xorg-server/v2-xserver-Fix-a-crash-with-XDMCP-error-handler.patch
@@ -0,0 +1,23 @@
+diff --git a/os/xdmcp.c b/os/xdmcp.c
+index b6e97c9..0e9e625 100644
+--- a/os/xdmcp.c
++++ b/os/xdmcp.c
+@@ -1409,8 +1409,16 @@ recv_alive_msg(unsigned length)
+ static void
+ XdmcpFatal(const char *type, ARRAY8Ptr status)
+ {
+-    FatalError("XDMCP fatal error: %s %*.*s\n", type,
+-               status->length, status->length, status->data);
++    char *error_message;
++
++    /* error_message is leaked, but that's fine, we're aborting */
++    error_message = malloc (status->length + 1);
++    if (!error_message)
++        FatalError("XDMCP fatal error: %s", type);
++
++    memcpy(error_message, status->data, status->length);
++    error_message[status->length] = '\0';
++    FatalError("XDMCP fatal error: %s %s\n", type, error_message);
+ }
+ 
+ static void
-- 
cgit v1.2.3-2-g168b