Browse Source

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.
Sam Lantinga 7 years ago
parent
commit
e10a98d2ad
2 changed files with 13 additions and 0 deletions
  1. 5 0
      include/SDL_video.h
  2. 8 0
      src/video/SDL_video.c

+ 5 - 0
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);
 

+ 8 - 0
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