Commit e10a98d2ade42775562fc5885321baafa29a7aa9

Sam Lantinga 2017-07-31T12:57:15

Fixed bug 3720 - SDL_GL_GetAttribute doesn't check for initialized video driver Simon Hug SDL_GL_GetAttribute doesn't check if a video driver has been initialized and will access the SDL_VideoDevice pointer, which is NULL at that point. I think all of the attributes require an initialized driver, so a simple NULL check should fix it. Patch is attached.

diff --git a/include/SDL_video.h b/include/SDL_video.h
index 868b6b3..21a1424 100644
--- a/include/SDL_video.h
+++ b/include/SDL_video.h
@@ -1111,11 +1111,16 @@ extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void);
 
 /**
  *  \brief Set an OpenGL window attribute before window creation.
+ *
+ *  \return 0 on success, or -1 if the attribute could not be set.
  */
 extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value);
 
 /**
  *  \brief Get the actual value for an attribute from the current context.
+ *
+ *  \return 0 on success, or -1 if the attribute could not be retrieved.
+ *          The integer at \c value will be modified in either case.
  */
 extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value);
 
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index ab3a8ef..af2ac26 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -3113,9 +3113,17 @@ SDL_GL_GetAttribute(SDL_GLattr attr, int *value)
     GLenum attachmentattrib = 0;
 #endif
 
+    if (!value) {
+        return SDL_InvalidParamError("value");
+    }
+
     /* Clear value in any case */
     *value = 0;
 
+    if (!_this) {
+        return SDL_UninitializedVideo();
+    }
+
     switch (attr) {
     case SDL_GL_RED_SIZE:
 #if SDL_VIDEO_OPENGL