Program/ShaderGL: handle empty info logs
The GL driver can sometimes have an empty info log and return an info
log length of 0. This would cause a vector to be initialized with a
length of 0 just before it's .data() pointer was used, causing a
segfault.
BUG=angleproject:1323
Change-Id: Iaf9b569ec64a90c714a213562e427fb7cc8daa6b
Reviewed-on: https://chromium-review.googlesource.com/330197
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/libANGLE/renderer/gl/ProgramGL.cpp b/src/libANGLE/renderer/gl/ProgramGL.cpp
index f5adc3b..83d4ca8 100644
--- a/src/libANGLE/renderer/gl/ProgramGL.cpp
+++ b/src/libANGLE/renderer/gl/ProgramGL.cpp
@@ -117,15 +117,23 @@
GLint infoLogLength = 0;
mFunctions->getProgramiv(mProgramID, GL_INFO_LOG_LENGTH, &infoLogLength);
- std::vector<char> buf(infoLogLength);
- mFunctions->getProgramInfoLog(mProgramID, infoLogLength, nullptr, &buf[0]);
+ std::string warning;
+ if (infoLogLength > 0)
+ {
+ std::vector<char> buf(infoLogLength);
+ mFunctions->getProgramInfoLog(mProgramID, infoLogLength, nullptr, &buf[0]);
- mFunctions->deleteProgram(mProgramID);
- mProgramID = 0;
+ mFunctions->deleteProgram(mProgramID);
+ mProgramID = 0;
- infoLog << buf.data();
+ infoLog << buf.data();
- std::string warning = FormatString("Program link failed unexpectedly: %s", buf.data());
+ warning = FormatString("Program link failed unexpectedly: %s", buf.data());
+ }
+ else
+ {
+ warning = "Program link failed unexpectedly with no info log.";
+ }
ANGLEPlatformCurrent()->logWarning(warning.c_str());
TRACE("\n%s", warning.c_str());