Fix dereference before null check in QOpenGLExtensionMatcher

QOpenGLContext pointer was dereferenced before checking if it valid.

Coverity-Id: 11370
Change-Id: I87d83a87d88ad7c055f3ed32096bfda036224ca9
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
bb10
Jesus Fernandez 2016-04-19 10:16:42 +02:00
parent 00593d8e37
commit ecf025f613
1 changed files with 12 additions and 10 deletions

View File

@ -64,6 +64,10 @@ typedef const GLubyte * (QOPENGLF_APIENTRYP qt_glGetStringi)(GLenum, GLuint);
QOpenGLExtensionMatcher::QOpenGLExtensionMatcher()
{
QOpenGLContext *ctx = QOpenGLContext::currentContext();
if (!ctx) {
qWarning("QOpenGLExtensionMatcher::QOpenGLExtensionMatcher: No context");
return;
}
QOpenGLFunctions *funcs = ctx->functions();
const char *extensionStr = 0;
@ -79,19 +83,17 @@ QOpenGLExtensionMatcher::QOpenGLExtensionMatcher()
// clear error state
while (funcs->glGetError()) {}
if (ctx) {
qt_glGetStringi glGetStringi = (qt_glGetStringi)ctx->getProcAddress("glGetStringi");
qt_glGetStringi glGetStringi = (qt_glGetStringi)ctx->getProcAddress("glGetStringi");
if (!glGetStringi)
return;
if (!glGetStringi)
return;
GLint numExtensions = 0;
funcs->glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
GLint numExtensions = 0;
funcs->glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
for (int i = 0; i < numExtensions; ++i) {
const char *str = reinterpret_cast<const char *>(glGetStringi(GL_EXTENSIONS, i));
m_extensions.insert(str);
}
for (int i = 0; i < numExtensions; ++i) {
const char *str = reinterpret_cast<const char *>(glGetStringi(GL_EXTENSIONS, i));
m_extensions.insert(str);
}
#endif // QT_OPENGL_3
}