Subject: Re: nx-X11: Size of pointer 'server_support' used instead of size of its data

From: Heinrich Schuchardt <[email-masked]>
Date: Mon, 02 Feb 2015 20:52:27 +0100

The appended patch

From: Ian Romanick <[email-masked]>
Date: Thu, 13 Jul 2006 15:27:37 +0000
Subject: [PATCH] Move initialization of server_support from
__glXProcessServerString to __glXCalcualteUsableExtensions.

should solve the problem. I adjusted the file path to make it applicable
to x2go.

Cf.
https://bugs.freedesktop.org/show_bug.cgi?id=7353

The patch dates from *** 2006 ***. We definitely should rebase the mesa
code.

Best regards

Heinrich Schuchardt

From 7ef4a07165d49e671f6f569ee87bfe893b1e7fcf Mon Sep 17 00:00:00 2001
From: Ian Romanick <[email-masked]>
Date: Thu, 13 Jul 2006 15:27:37 +0000
Subject: [PATCH] Move initialization of server_support from
 __glXProcessServerString to __glXCalcualteUsableExtensions.  By having both
 callers of __glXProcessServerString initialize the bit-fields passed in, we
 guarantee that the correct amount of data is initialized:

This fixes bugzilla #7353.
---
 nx-X11/extras/Mesa/src/glx/x11/glxextensions.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/nx-X11/extras/Mesa/src/glx/x11/glxextensions.c b/nx-X11/extras/Mesa/src/glx/x11/glxextensions.c
index c3bc930..d00bdbb 100644
--- a/nx-X11/extras/Mesa/src/glx/x11/glxextensions.c
+++ b/nx-X11/extras/Mesa/src/glx/x11/glxextensions.c
@@ -319,6 +319,11 @@ set_glx_extension( const struct extension_info * ext,
  * 
  * \param server_string   GLX extension string from the server.
  * \param server_support  Bit-field of supported extensions.
+ * 
+ * \note
+ * This function is used to process both GLX and GL extension strings.  The
+ * bit-fields used to track each of these have different sizes.  Therefore,
+ * the data pointed by \c server_support must be preinitialized to zero.
  */
 static void
 __glXProcessServerString( const struct extension_info * ext,
@@ -328,8 +333,6 @@ __glXProcessServerString( const struct extension_info * ext,
    unsigned  base;
    unsigned  len;
 
-   (void) memset( server_support, 0, sizeof( server_support ) );
-   
    for ( base = 0 ; server_string[ base ] != NUL ; /* empty */ ) {
       /* Determine the length of the next extension name.
        */
@@ -580,6 +583,8 @@ __glXCalculateUsableExtensions( __GLXscreenConfigs *psc,
 
    __glXExtensionsCtr();
    __glXExtensionsCtrScreen( psc );
+
+   (void) memset( server_support, 0, sizeof( server_support ) );
    __glXProcessServerString( known_glx_extensions,
 			     psc->serverGLXexts, server_support );
 
-- 
2.1.4