egl_dri2/x11: error check coordinates in eglPostSubBufferNV
authorChia-I Wu <olv@lunarg.com>
Tue, 20 Dec 2011 09:25:22 +0000 (17:25 +0800)
committerChia-I Wu <olv@lunarg.com>
Tue, 20 Dec 2011 09:26:18 +0000 (17:26 +0800)
EGL_BAD_PARAMETER should be returned when any of the coordinates is negative.

src/egl/drivers/dri2/platform_x11.c

index 08a2c8d87897433f13530e321c403cd859fd6193..d789ec6793a791eeed816157ad990b9a1e87b3bb 100644 (file)
@@ -248,11 +248,8 @@ dri2_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
       free(reply);
    }
 
-   if (dri2_dpy->dri2 && type == EGL_WINDOW_BIT &&
-       dri2_surf->base.RenderBuffer == EGL_BACK_BUFFER)
-      dri2_surf->base.PostSubBufferSupportedNV = EGL_TRUE;
-   else
-      dri2_surf->base.PostSubBufferSupportedNV = EGL_FALSE;
+   /* we always copy the back buffer to front */
+   dri2_surf->base.PostSubBufferSupportedNV = EGL_TRUE;
 
    return &dri2_surf->base;
 
@@ -760,6 +757,9 @@ dri2_post_sub_buffer(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *draw,
 {
    const EGLint rect[4] = { x, draw->Height - y - height, width, height };
 
+   if (x < 0 || y < 0 || width < 0 || height < 0)
+      _eglError(EGL_BAD_PARAMETER, "eglPostSubBufferNV");
+
    return dri2_swap_buffers_region(drv, disp, draw, 1, rect);
 }