From 2d280266541443c61c799313a6bcd81c064f4347 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 3 Nov 2010 09:28:28 +0000 Subject: [PATCH] From David Fries, "Fix remote X11 crash querying GL_NUM_EXTENSIONS In osg::isGLExtensionOrVersionSupported in src/osg/GLExtensions.cpp when using indirect X11 rendering, glGetIntegerv( GL_NUM_EXTENSIONS, &numExt ); is leaving numExt uninitilized causing the following glGetStringi to return NULL when the extension number isn't present. Passing NULL to std::string() then crashes. This is with the following nVidia driver. OpenGL version string: 3.3.0 NVIDIA 256.35 I went ahead and initialized some of the other variables before glGetInitegerv in other files as well. I don't know for sure which ones can fail, so I don't know which are strictly required. " --- examples/osgautocapture/osgautocapture.cpp | 2 +- src/osg/FragmentProgram.cpp | 2 +- src/osg/GLExtensions.cpp | 2 +- src/osg/Shader.cpp | 2 +- src/osg/State.cpp | 2 +- src/osg/Texture.cpp | 2 ++ src/osg/Texture2DArray.cpp | 2 ++ src/osg/Texture3D.cpp | 1 + src/osg/VertexProgram.cpp | 2 +- 9 files changed, 11 insertions(+), 6 deletions(-) diff --git a/examples/osgautocapture/osgautocapture.cpp b/examples/osgautocapture/osgautocapture.cpp index 75a5b568c..b9366266e 100644 --- a/examples/osgautocapture/osgautocapture.cpp +++ b/examples/osgautocapture/osgautocapture.cpp @@ -99,7 +99,7 @@ public: #if defined(OSG_GLES1_AVAILABLE) || defined(OSG_GLES2_AVAILABLE) if (pixelFormat == GL_RGB) { - GLint value; + GLint value = 0; #ifndef GL_IMPLEMENTATION_COLOR_READ_FORMAT #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B #endif diff --git a/src/osg/FragmentProgram.cpp b/src/osg/FragmentProgram.cpp index 9e9aab4f9..bf2a7344a 100644 --- a/src/osg/FragmentProgram.cpp +++ b/src/osg/FragmentProgram.cpp @@ -150,7 +150,7 @@ void FragmentProgram::apply(State& state) const _fragmentProgram.length(), _fragmentProgram.c_str()); // Check for errors - GLint errorposition; + GLint errorposition = 0; glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorposition); if (errorposition != -1) { diff --git a/src/osg/GLExtensions.cpp b/src/osg/GLExtensions.cpp index 10b93a595..34e5beb1f 100644 --- a/src/osg/GLExtensions.cpp +++ b/src/osg/GLExtensions.cpp @@ -129,7 +129,7 @@ bool osg::isGLExtensionOrVersionSupported(unsigned int contextID, const char *ex # ifndef GL_NUM_EXTENSIONS # define GL_NUM_EXTENSIONS 0x821D # endif - GLint numExt; + GLint numExt = 0; glGetIntegerv( GL_NUM_EXTENSIONS, &numExt ); int idx; for( idx=0; idxgetShaderBinary()) { - GLint numFormats; + GLint numFormats = 0; glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &numFormats); if (numFormats>0) diff --git a/src/osg/State.cpp b/src/osg/State.cpp index e89c7b001..cebcf0d1b 100644 --- a/src/osg/State.cpp +++ b/src/osg/State.cpp @@ -899,7 +899,7 @@ void State::initializeExtensionProcs() osg::isGLExtensionSupported(_contextID,"GL_EXT_multitexture") || OSG_GLES1_FEATURES) { - GLint maxTextureUnits; + GLint maxTextureUnits = 0; glGetIntegerv(GL_MAX_TEXTURE_UNITS,&maxTextureUnits); _glMaxTextureUnits = maxTextureUnits; _glMaxTextureCoords = maxTextureUnits; diff --git a/src/osg/Texture.cpp b/src/osg/Texture.cpp index 9630faf74..d5f3d40da 100644 --- a/src/osg/Texture.cpp +++ b/src/osg/Texture.cpp @@ -2258,6 +2258,7 @@ Texture::Extensions::Extensions(unsigned int contextID) OSG_INFO<<"Disabling _isNonPowerOfTwoTextureMipMappedSupported for GeForce FX hardware."<=0; + _maxTexture3DSize = 0; glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE, &_maxTexture3DSize); setGLExtensionFuncPtr(glTexImage3D,"glTexImage3D","glTexImage3DEXT"); diff --git a/src/osg/VertexProgram.cpp b/src/osg/VertexProgram.cpp index 1ead4bf5d..1e70c45bc 100644 --- a/src/osg/VertexProgram.cpp +++ b/src/osg/VertexProgram.cpp @@ -150,7 +150,7 @@ void VertexProgram::apply(State& state) const _vertexProgram.length(), _vertexProgram.c_str()); // Check for errors - GLint errorposition; + GLint errorposition = 0; glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorposition); if (errorposition != -1) {