From e10a98d2ade42775562fc5885321baafa29a7aa9 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 31 Jul 2017 12:57:15 -0700 Subject: [PATCH] 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. --- include/SDL_video.h | 5 +++++ src/video/SDL_video.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/include/SDL_video.h b/include/SDL_video.h index 868b6b3f245d4..21a1424898cd3 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 ab3a8efb57654..af2ac2697cfa8 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