Fixes crash when xscreensaver tries to use GammaRamp calls to fade out
http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6915712

Signed-off-by: Alan Coopersmith <[email protected]>
---
 hw/xfree86/common/xf86cmap.c |   31 ++++++++++++++++++-------------
 1 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c
index 08f557c..edd5ae9 100644
--- a/hw/xfree86/common/xf86cmap.c
+++ b/hw/xfree86/common/xf86cmap.c
@@ -1004,12 +1004,14 @@ xf86ChangeGammaRamp(
        xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
        RRCrtcPtr crtc = 
config->output[config->compat_output]->crtc->randr_crtc;
 
-       if (crtc->gammaSize != size)
-           return BadValue;
+       if (crtc) {
+           if (crtc->gammaSize != size)
+               return BadValue;
 
-       RRCrtcGammaSet(crtc, red, green, blue);
+           RRCrtcGammaSet(crtc, red, green, blue);
 
-       return Success;
+           return Success;
+       }
     }
 
     if(CMapScreenKey == NULL)
@@ -1077,7 +1079,8 @@ xf86GetGammaRampSize(ScreenPtr pScreen)
        xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
        RRCrtcPtr crtc = 
config->output[config->compat_output]->crtc->randr_crtc;
 
-       return crtc->gammaSize;
+       if (crtc)
+           return crtc->gammaSize;
     }
 
     if(CMapScreenKey == NULL) return 0;
@@ -1106,17 +1109,19 @@ xf86GetGammaRamp(
        xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
        RRCrtcPtr crtc = 
config->output[config->compat_output]->crtc->randr_crtc;
 
-       if (crtc->gammaSize < size)
-           return BadValue;
+       if (crtc) {
+           if (crtc->gammaSize < size)
+               return BadValue;
 
-       if (!RRCrtcGammaGet(crtc))
-           return BadImplementation;
+           if (!RRCrtcGammaGet(crtc))
+               return BadImplementation;
 
-       memcpy(red, crtc->gammaRed, size * sizeof(*red));
-       memcpy(green, crtc->gammaGreen, size * sizeof(*green));
-       memcpy(blue, crtc->gammaBlue, size * sizeof(*blue));
+           memcpy(red, crtc->gammaRed, size * sizeof(*red));
+           memcpy(green, crtc->gammaGreen, size * sizeof(*green));
+           memcpy(blue, crtc->gammaBlue, size * sizeof(*blue));
 
-       return Success;
+           return Success;
+       }
     }
 
     if(CMapScreenKey == NULL) 
-- 
1.5.6.5

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to