st/wgl: check for hPbuffer=0 in wgl pbuffer functions
authorBrian Paul <brianp@vmware.com>
Thu, 16 Feb 2012 19:20:57 +0000 (12:20 -0700)
committerBrian Paul <brianp@vmware.com>
Thu, 23 Feb 2012 14:49:08 +0000 (07:49 -0700)
Per the GL_WGL_pbuffer spec, generate ERROR_INVALID_HANDLE and
return FALSE (and don't segfault).

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/state_trackers/wgl/stw_ext_pbuffer.c

index 085591a556076d4071e3ee2f536cddcda8b32d68..7596cb6bd9502a6527bde6b589016d536b8d7d0e 100644 (file)
@@ -239,6 +239,11 @@ wglGetPbufferDCARB(HPBUFFERARB hPbuffer)
    struct stw_framebuffer *fb;
    HDC hDC;
 
+   if (!hPbuffer) {
+      SetLastError(ERROR_INVALID_HANDLE);
+      return NULL;
+   }
+
    fb = (struct stw_framebuffer *)hPbuffer;
 
    hDC = GetDC(fb->hWnd);
@@ -255,6 +260,11 @@ wglReleasePbufferDCARB(HPBUFFERARB hPbuffer,
 {
    struct stw_framebuffer *fb;
 
+   if (!hPbuffer) {
+      SetLastError(ERROR_INVALID_HANDLE);
+      return 0;
+   }
+
    fb = (struct stw_framebuffer *)hPbuffer;
 
    return ReleaseDC(fb->hWnd, hDC);
@@ -266,6 +276,11 @@ wglDestroyPbufferARB(HPBUFFERARB hPbuffer)
 {
    struct stw_framebuffer *fb;
 
+   if (!hPbuffer) {
+      SetLastError(ERROR_INVALID_HANDLE);
+      return FALSE;
+   }
+
    fb = (struct stw_framebuffer *)hPbuffer;
 
    /* This will destroy all our data */
@@ -280,6 +295,11 @@ wglQueryPbufferARB(HPBUFFERARB hPbuffer,
 {
    struct stw_framebuffer *fb;
 
+   if (!hPbuffer) {
+      SetLastError(ERROR_INVALID_HANDLE);
+      return FALSE;
+   }
+
    fb = (struct stw_framebuffer *)hPbuffer;
 
    switch (iAttribute) {