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());