Move GetUniform size validation to top layer.

BUG=angle:571

Change-Id: Ie7064cf85f6a125ccd6cdf1bff89443520e2a06d
Reviewed-on: https://chromium-review.googlesource.com/212932
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/validationES.cpp b/src/libGLESv2/validationES.cpp
index 6981e29..7f957d0 100644
--- a/src/libGLESv2/validationES.cpp
+++ b/src/libGLESv2/validationES.cpp
@@ -1737,6 +1737,14 @@
         return gl::error(GL_INVALID_OPERATION, false);
     }
 
+    // sized queries -- ensure the provided buffer is large enough
+    LinkedUniform *uniform = programBinary->getUniformByLocation(location);
+    size_t requiredBytes = VariableExternalSize(uniform->type);
+    if (static_cast<size_t>(bufSize) < requiredBytes)
+    {
+        return gl::error(GL_INVALID_OPERATION, false);
+    }
+
     return true;
 }
 
@@ -1760,6 +1768,14 @@
         return gl::error(GL_INVALID_OPERATION, false);
     }
 
+    // sized queries -- ensure the provided buffer is large enough
+    LinkedUniform *uniform = programBinary->getUniformByLocation(location);
+    size_t requiredBytes = VariableExternalSize(uniform->type);
+    if (static_cast<size_t>(bufSize) < requiredBytes)
+    {
+        return gl::error(GL_INVALID_OPERATION, false);
+    }
+
     return true;
 }