0578a1d
From 30c077f228f563e4e1f4115b345577d9fd393b68 Mon Sep 17 00:00:00 2001
0578a1d
From: Peter Hutterer <peter.hutterer@redhat.com>
0578a1d
Date: Fri, 24 Oct 2008 15:06:49 +1030
0578a1d
Subject: [PATCH] dix: extra sanity-checks against potential NULL-dereferences. #434807
0578a1d
0578a1d
Two minor code paths could potentially crash the server:
0578a1d
- if scr is NULL, we shouldn't try to dereference it.
0578a1d
- if GPE is called with buttons != 0 but the event is not a
0578a1d
  ButtonPress or ButtonRelease, the button mapping may dereference a NULL
0578a1d
  pointer.
0578a1d
0578a1d
Admittedly the second should never happen, but better to guard against it.
0578a1d
---
0578a1d
 dix/getevents.c |    6 ++++++
0578a1d
 1 files changed, 6 insertions(+), 0 deletions(-)
0578a1d
0578a1d
diff --git a/dix/getevents.c b/dix/getevents.c
0578a1d
index 1e0edbf..923744d 100644
0578a1d
--- a/dix/getevents.c
0578a1d
+++ b/dix/getevents.c
0578a1d
@@ -537,6 +537,9 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
0578a1d
     ScreenPtr scr = miPointerGetScreen(pDev);
0578a1d
 
0578a1d
     /* Sanity checks. */
0578a1d
+    if (!scr)
0578a1d
+        return 0;
0578a1d
+
0578a1d
     if (type != MotionNotify && type != ButtonPress && type != ButtonRelease)
0578a1d
         return 0;
0578a1d
 
0578a1d
@@ -548,6 +551,9 @@ GetPointerEvents(xEvent *events, DeviceIntPtr pDev, int type, int buttons,
0578a1d
     if (!pDev->valuator)
0578a1d
         return 0;
0578a1d
 
0578a1d
+    if (buttons && !pDev->button)
0578a1d
+        return 0;
0578a1d
+
0578a1d
     if (!coreOnly && pDev->coreEvents)
0578a1d
         num_events = 2;
0578a1d
     else
0578a1d
-- 
0578a1d
1.6.0.3
0578a1d