st/wgl: Clamp wglChoosePixelFormatARB's output nNumFormats to nMaxFormats.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 24 Jul 2014 14:50:56 +0000 (15:50 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 29 Jul 2014 14:41:32 +0000 (15:41 +0100)
While running https://github.com/nvMcJohn/apitest with apitrace I noticed that Mesa was producing bogus results:

  wglChoosePixelFormatARB(hdc, piAttribIList = {...}, pfAttribFList = &0, nMaxFormats = 1, piFormats = {19, 65576, 37, 198656, 131075, 0, 402653184, 0, 0, 0, 0, -573575710}, nNumFormats = &12) = TRUE

However https://www.opengl.org/registry/specs/ARB/wgl_pixel_format.txt states

    <nNumFormats> returns the number of matching formats. The returned
    value is guaranteed to be no larger than <nMaxFormats>.

Cc: "10.2" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/state_trackers/wgl/stw_ext_pixelformat.c

index d303b0153cb56dd888ad0dd25077916372c46c8f..91682d115a4f00131ac9ece8bb2d06e4f8a85138 100644 (file)
@@ -448,9 +448,11 @@ wglChoosePixelFormatARB(
     */
    for (i = 0; i < count; i++) {
       if (scores[i].points > 0) {
-         if (*nNumFormats < nMaxFormats)
-            piFormats[*nNumFormats] = scores[i].index + 1;
+        piFormats[*nNumFormats] = scores[i].index + 1;
          (*nNumFormats)++;
+        if (*nNumFormats >= nMaxFormats) {
+           break;
+        }
       }
    }