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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
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