From 15c59f3974b3701cf48e766da1ff1bd391cbddb4 Mon Sep 17 00:00:00 2001 From: Yuri Kunde Schlesner Date: Tue, 21 Oct 2014 16:07:39 -0200 Subject: Only check OpenGL shader log if size is >1. This prevents a crash when the buffer size returned by the driver is 0, in which case no space is allocated to store even the NULL byte and glGetShaderInfoLog errors out. Thanks to @Relys for the bug report. --- src/video_core/renderer_opengl/gl_shader_util.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'src/video_core/renderer_opengl') diff --git a/src/video_core/renderer_opengl/gl_shader_util.cpp b/src/video_core/renderer_opengl/gl_shader_util.cpp index 10239c8a..a0eb0418 100644 --- a/src/video_core/renderer_opengl/gl_shader_util.cpp +++ b/src/video_core/renderer_opengl/gl_shader_util.cpp @@ -29,10 +29,9 @@ GLuint LoadShaders(const char* vertex_shader, const char* fragment_shader) { glGetShaderiv(vertex_shader_id, GL_COMPILE_STATUS, &result); glGetShaderiv(vertex_shader_id, GL_INFO_LOG_LENGTH, &info_log_length); - std::vector vertex_shader_error(info_log_length); - glGetShaderInfoLog(vertex_shader_id, info_log_length, NULL, &vertex_shader_error[0]); - if (info_log_length > 1) { + std::vector vertex_shader_error(info_log_length); + glGetShaderInfoLog(vertex_shader_id, info_log_length, NULL, &vertex_shader_error[0]); DEBUG_LOG(GPU, "%s", &vertex_shader_error[0]); } @@ -46,10 +45,9 @@ GLuint LoadShaders(const char* vertex_shader, const char* fragment_shader) { glGetShaderiv(fragment_shader_id, GL_COMPILE_STATUS, &result); glGetShaderiv(fragment_shader_id, GL_INFO_LOG_LENGTH, &info_log_length); - std::vector fragment_shader_error(info_log_length); - glGetShaderInfoLog(fragment_shader_id, info_log_length, NULL, &fragment_shader_error[0]); - if (info_log_length > 1) { + std::vector fragment_shader_error(info_log_length); + glGetShaderInfoLog(fragment_shader_id, info_log_length, NULL, &fragment_shader_error[0]); DEBUG_LOG(GPU, "%s", &fragment_shader_error[0]); } @@ -65,10 +63,9 @@ GLuint LoadShaders(const char* vertex_shader, const char* fragment_shader) { glGetProgramiv(program_id, GL_LINK_STATUS, &result); glGetProgramiv(program_id, GL_INFO_LOG_LENGTH, &info_log_length); - std::vector program_error(std::max(info_log_length, int(1))); - glGetProgramInfoLog(program_id, info_log_length, NULL, &program_error[0]); - if (info_log_length > 1) { + std::vector program_error(info_log_length); + glGetProgramInfoLog(program_id, info_log_length, NULL, &program_error[0]); DEBUG_LOG(GPU, "%s", &program_error[0]); } -- cgit v1.2.3