From 5309671c55c29bb7fbab98f346ef7a3a86c74e23 Mon Sep 17 00:00:00 2001
From: Ilyes Gouta <ilyes.gouta@st.com>
Date: Wed, 7 Nov 2012 09:10:12 -0500
Subject: [PATCH] idirectfbdisplaylayer: check if data->stack isn't NULL
 before calling any cursor routines

For example, calling IDirectFBDisplayLayer_EnableCursor() leads to a SIGSEGV within
dfb_windowstack_lock() because of a deference of the uninitialized CoreWindowStack *stack
variable.

The patch introduces few more additional checks, just like what has been implemented in
IDirectFBDisplayLayer_SetBackgroundMode() and IDirectFBDisplayLayer_SetBackgroundImage().

Signed-off-by: Ilyes Gouta <ilyes.gouta@st.com>
---
 src/display/idirectfbdisplaylayer.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/src/display/idirectfbdisplaylayer.c b/src/display/idirectfbdisplaylayer.c
index 27b0fc9..9e50824 100644
--- a/src/display/idirectfbdisplaylayer.c
+++ b/src/display/idirectfbdisplaylayer.c
@@ -765,6 +765,9 @@ IDirectFBDisplayLayer_EnableCursor( IDirectFBDisplayLayer *thiz, int enable )
      if (data->level == DLSCL_SHARED)
           return DFB_ACCESSDENIED;
 
+     if (!data->stack)
+          return DFB_OK;
+
      return CoreWindowStack_CursorEnable( data->stack, enable );
 }
 
@@ -780,6 +783,9 @@ IDirectFBDisplayLayer_GetCursorPosition( IDirectFBDisplayLayer *thiz,
      if (!x && !y)
           return DFB_INVARG;
 
+     if (!data->stack)
+          return DFB_ACCESSDENIED;
+
      ret = CoreWindowStack_CursorGetPosition( data->stack, &point );
      if (ret)
           return ret;
@@ -803,6 +809,9 @@ IDirectFBDisplayLayer_WarpCursor( IDirectFBDisplayLayer *thiz, int x, int y )
      if (data->level == DLSCL_SHARED)
           return DFB_ACCESSDENIED;
 
+     if (!data->stack)
+          return DFB_OK;
+
      return CoreWindowStack_CursorWarp( data->stack, &point );
 }
 
@@ -820,6 +829,9 @@ IDirectFBDisplayLayer_SetCursorAcceleration( IDirectFBDisplayLayer *thiz,
      if (data->level == DLSCL_SHARED)
           return DFB_ACCESSDENIED;
 
+     if (!data->stack)
+          return DFB_OK;
+
      return CoreWindowStack_CursorSetAcceleration( data->stack, numerator,
                                                    denominator, threshold );
 }
@@ -841,6 +853,9 @@ IDirectFBDisplayLayer_SetCursorShape( IDirectFBDisplayLayer *thiz,
      if (data->level == DLSCL_SHARED)
           return DFB_ACCESSDENIED;
 
+     if (!data->stack)
+          return DFB_OK;
+
      shape_data = (IDirectFBSurface_data*)shape->priv;
 
      if (hot_x < 0  ||
@@ -863,6 +878,9 @@ IDirectFBDisplayLayer_SetCursorOpacity( IDirectFBDisplayLayer *thiz,
      if (data->level == DLSCL_SHARED)
           return DFB_ACCESSDENIED;
 
+     if (!data->stack)
+          return DFB_OK;
+
      return CoreWindowStack_CursorSetOpacity( data->stack, opacity );
 }
 
-- 
1.7.7.6

