Tighten context state queries

* Ensured integrity of robust queries validation.

* Added consistent early exits to Context commands.

* Removed unused placeholder variables.

Bug: angleproject:410069485
Change-Id: I26504f67cec99a85b9061ccfd4191df53af915e6
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/7552873
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com>
diff --git a/src/libANGLE/Context.cpp b/src/libANGLE/Context.cpp
index 4e01753..36a2c84 100644
--- a/src/libANGLE/Context.cpp
+++ b/src/libANGLE/Context.cpp
@@ -2584,8 +2584,8 @@
 
     GLenum nativeType;
     unsigned int numParams;
-    bool queryStatus = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
-    ASSERT(queryStatus);
+    const bool paramFound = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
+    ASSERT(paramFound);
 
     if (nativeType == GL_INT)
     {
@@ -2630,8 +2630,8 @@
 
     GLenum nativeType;
     unsigned int numParams;
-    bool queryStatus = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
-    ASSERT(queryStatus);
+    const bool paramFound = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
+    ASSERT(paramFound);
 
     if (nativeType == GL_INT_64_ANGLEX)
     {
@@ -2655,8 +2655,8 @@
 
     GLenum nativeType;
     unsigned int numParams;
-    bool queryStatus = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
-    ASSERT(queryStatus);
+    const bool paramFound = getIndexedQueryParameterInfo(target, &nativeType, &numParams);
+    ASSERT(paramFound);
 
     if (nativeType == GL_BOOL)
     {
@@ -7108,7 +7108,11 @@
 {
     GLenum nativeType;
     unsigned int numParams;
-    getQueryParameterInfo(pname, &nativeType, &numParams);
+    const bool paramFound = getQueryParameterInfo(pname, &nativeType, &numParams);
+    if (ANGLE_UNLIKELY(!paramFound))
+    {
+        return;  // Avoid crashing with invalid apps running with no validation.
+    }
 
     if (nativeType == GL_BOOL)
     {
@@ -7134,7 +7138,11 @@
 {
     GLenum nativeType;
     unsigned int numParams;
-    getQueryParameterInfo(pname, &nativeType, &numParams);
+    const bool paramFound = getQueryParameterInfo(pname, &nativeType, &numParams);
+    if (ANGLE_UNLIKELY(!paramFound))
+    {
+        return;  // Avoid crashing with invalid apps running with no validation.
+    }
 
     if (nativeType == GL_FLOAT)
     {
@@ -7160,7 +7168,11 @@
 {
     GLenum nativeType;
     unsigned int numParams;
-    getQueryParameterInfo(pname, &nativeType, &numParams);
+    const bool paramFound = getQueryParameterInfo(pname, &nativeType, &numParams);
+    if (ANGLE_UNLIKELY(!paramFound))
+    {
+        return;  // Avoid crashing with invalid apps running with no validation.
+    }
 
     if (nativeType == GL_INT)
     {
@@ -7948,7 +7960,11 @@
 {
     GLenum nativeType;
     unsigned int numParams;
-    getQueryParameterInfo(pname, &nativeType, &numParams);
+    const bool paramFound = getQueryParameterInfo(pname, &nativeType, &numParams);
+    if (ANGLE_UNLIKELY(!paramFound))
+    {
+        return;  // Avoid crashing with invalid apps running with no validation.
+    }
 
     if (nativeType == GL_INT_64_ANGLEX)
     {
diff --git a/src/libANGLE/Context_gles_1_0.cpp b/src/libANGLE/Context_gles_1_0.cpp
index ef53bfa..fce5ee2 100644
--- a/src/libANGLE/Context_gles_1_0.cpp
+++ b/src/libANGLE/Context_gles_1_0.cpp
@@ -57,9 +57,12 @@
 void Context::getFixedv(GLenum pname, GLfixed *params)
 {
     GLenum nativeType;
-    unsigned int numParams = 0;
-
-    getQueryParameterInfo(pname, &nativeType, &numParams);
+    unsigned int numParams;
+    const bool paramFound = getQueryParameterInfo(pname, &nativeType, &numParams);
+    if (ANGLE_UNLIKELY(!paramFound))
+    {
+        return;  // Avoid crashing with invalid apps running with no validation.
+    }
 
     std::vector<GLfloat> paramsf(numParams, 0);
     CastStateValues(this, nativeType, pname, numParams, paramsf.data());
diff --git a/src/libANGLE/validationES.cpp b/src/libANGLE/validationES.cpp
index 2b290cf..e2726ee 100644
--- a/src/libANGLE/validationES.cpp
+++ b/src/libANGLE/validationES.cpp
@@ -2961,7 +2961,7 @@
                         angle::EntryPoint entryPoint,
                         GLenum pname,
                         const void *data,
-                        unsigned int *outNumParams)
+                        GLsizei *outNumParams)
 {
     if (data == nullptr)
     {
@@ -2970,7 +2970,8 @@
     }
 
     GLenum nativeType;
-    if (!context->getQueryParameterInfo(pname, &nativeType, outNumParams))
+    unsigned int numParams;
+    if (!context->getQueryParameterInfo(pname, &nativeType, &numParams))
     {
         ANGLE_VALIDATION_ERROR(GL_INVALID_ENUM, kInvalidPname);
         return false;
@@ -3100,6 +3101,11 @@
             break;
     }
 
+    if (outNumParams != nullptr)
+    {
+        *outNumParams = numParams;
+    }
+
     return true;
 }
 
@@ -3155,11 +3161,13 @@
                               GLsizei paramCount,
                               const void *data)
 {
-    unsigned int numParams;
+    // Make sure ValidateStateQuery sets numParams
+    GLsizei numParams = std::numeric_limits<GLsizei>::max();
     if (!ValidateStateQuery(context, entryPoint, pname, data, &numParams))
     {
         return false;
     }
+    ASSERT(numParams != std::numeric_limits<GLsizei>::max());
 
     if (!ValidateRobustParamCount(context, entryPoint, paramCount, numParams))
     {
diff --git a/src/libANGLE/validationES.h b/src/libANGLE/validationES.h
index 8b46a27..9499e42 100644
--- a/src/libANGLE/validationES.h
+++ b/src/libANGLE/validationES.h
@@ -328,7 +328,7 @@
                         angle::EntryPoint entryPoint,
                         GLenum pname,
                         const void *data,
-                        unsigned int *outNumParams);
+                        GLsizei *outNumParams);
 bool ValidateRobustStateQuery(const Context *context,
                               angle::EntryPoint entryPoint,
                               GLenum pname,
diff --git a/src/libANGLE/validationES1.cpp b/src/libANGLE/validationES1.cpp
index f10ab2a..9318ded 100644
--- a/src/libANGLE/validationES1.cpp
+++ b/src/libANGLE/validationES1.cpp
@@ -926,8 +926,7 @@
                        GLenum pname,
                        const GLfixed *params)
 {
-    unsigned int numParams;
-    return ValidateStateQuery(context, entryPoint, pname, params, &numParams);
+    return ValidateStateQuery(context, entryPoint, pname, params, nullptr);
 }
 
 bool ValidateGetLightfv(const PrivateState &state,
diff --git a/src/libANGLE/validationES2.cpp b/src/libANGLE/validationES2.cpp
index 38bd2c6..781e3cd 100644
--- a/src/libANGLE/validationES2.cpp
+++ b/src/libANGLE/validationES2.cpp
@@ -4580,8 +4580,7 @@
                          GLenum pname,
                          const GLboolean *data)
 {
-    unsigned int numParams;
-    return ValidateStateQuery(context, entryPoint, pname, data, &numParams);
+    return ValidateStateQuery(context, entryPoint, pname, data, nullptr);
 }
 
 bool ValidateGetError(const Context *context, angle::EntryPoint entryPoint)
@@ -4594,8 +4593,7 @@
                        GLenum pname,
                        const GLfloat *data)
 {
-    unsigned int numParams;
-    return ValidateStateQuery(context, entryPoint, pname, data, &numParams);
+    return ValidateStateQuery(context, entryPoint, pname, data, nullptr);
 }
 
 bool ValidateGetIntegerv(const Context *context,
@@ -4603,8 +4601,7 @@
                          GLenum pname,
                          const GLint *data)
 {
-    unsigned int numParams;
-    return ValidateStateQuery(context, entryPoint, pname, data, &numParams);
+    return ValidateStateQuery(context, entryPoint, pname, data, nullptr);
 }
 
 bool ValidateGetProgramInfoLog(const Context *context,
diff --git a/src/libANGLE/validationES3.cpp b/src/libANGLE/validationES3.cpp
index f3896e1..81ce322 100644
--- a/src/libANGLE/validationES3.cpp
+++ b/src/libANGLE/validationES3.cpp
@@ -3227,11 +3227,13 @@
         return false;
     }
 
-    GLsizei numParams;
+    // Make sure ValidateIndexedStateQuery sets numParams
+    GLsizei numParams = std::numeric_limits<GLsizei>::max();
     if (!ValidateIndexedStateQuery(context, entryPoint, target, index, data, &numParams))
     {
         return false;
     }
+    ASSERT(numParams != std::numeric_limits<GLsizei>::max());
 
     if (!ValidateRobustParamCount(context, entryPoint, paramCount, numParams))
     {
@@ -3264,11 +3266,13 @@
         return false;
     }
 
-    GLsizei numParams;
+    // Make sure ValidateIndexedStateQuery sets numParams
+    GLsizei numParams = std::numeric_limits<GLsizei>::max();
     if (!ValidateIndexedStateQuery(context, entryPoint, target, index, data, &numParams))
     {
         return false;
     }
+    ASSERT(numParams != std::numeric_limits<GLsizei>::max());
 
     if (!ValidateRobustParamCount(context, entryPoint, paramCount, numParams))
     {
@@ -4550,8 +4554,7 @@
                            GLenum pname,
                            const GLint64 *data)
 {
-    unsigned int numParams;
-    return ValidateStateQuery(context, entryPoint, pname, data, &numParams);
+    return ValidateStateQuery(context, entryPoint, pname, data, nullptr);
 }
 
 bool ValidateIsSampler(const Context *context, angle::EntryPoint entryPoint, SamplerID sampler)
diff --git a/src/libANGLE/validationESEXT.cpp b/src/libANGLE/validationESEXT.cpp
index 49961dc..8873a69 100644
--- a/src/libANGLE/validationESEXT.cpp
+++ b/src/libANGLE/validationESEXT.cpp
@@ -1088,8 +1088,7 @@
                               GLenum pname,
                               const GLint64 *data)
 {
-    unsigned int numParams;
-    return ValidateStateQuery(context, entryPoint, pname, data, &numParams);
+    return ValidateStateQuery(context, entryPoint, pname, data, nullptr);
 }
 
 bool ValidateCopyImageSubDataEXT(const Context *context,