Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 2470623002: command buffer: audit validation of ES3 commands (part 3) (Closed)
Patch Set: resolve a problem thanks to feedback Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index bd7bed5278f045b9e79c7fbbed2eba291918d3fc..d2073de6edbae216b85b8418dea3faef850d756e 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -15215,7 +15215,7 @@ error::Error GLES2DecoderImpl::HandleGetProgramInfoCHROMIUM(
error::Error GLES2DecoderImpl::HandleGetUniformBlocksCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
- if (!unsafe_es3_apis_enabled())
+ if (!feature_info_->IsWebGL2OrES3Context())
return error::kUnknownCommand;
const volatile gles2::cmds::GetUniformBlocksCHROMIUM& c =
*static_cast<const volatile gles2::cmds::GetUniformBlocksCHROMIUM*>(
@@ -15236,7 +15236,7 @@ error::Error GLES2DecoderImpl::HandleGetUniformBlocksCHROMIUM(
error::Error GLES2DecoderImpl::HandleGetUniformsES3CHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
- if (!unsafe_es3_apis_enabled())
+ if (!feature_info_->IsWebGL2OrES3Context())
return error::kUnknownCommand;
const volatile gles2::cmds::GetUniformsES3CHROMIUM& c =
*static_cast<const volatile gles2::cmds::GetUniformsES3CHROMIUM*>(
@@ -15257,7 +15257,7 @@ error::Error GLES2DecoderImpl::HandleGetUniformsES3CHROMIUM(
error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVarying(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
- if (!unsafe_es3_apis_enabled())
+ if (!feature_info_->IsWebGL2OrES3Context())
return error::kUnknownCommand;
const volatile gles2::cmds::GetTransformFeedbackVarying& c =
*static_cast<const volatile gles2::cmds::GetTransformFeedbackVarying*>(
@@ -15288,6 +15288,13 @@ error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVarying(
"glGetTransformFeedbackVarying", "program not linked");
return error::kNoError;
}
+ GLint num_varyings = 0;
+ glGetProgramiv(service_id, GL_TRANSFORM_FEEDBACK_VARYINGS, &num_varyings);
+ if (index >= static_cast<GLuint>(num_varyings)) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
+ "glGetTransformFeedbackVarying", "index out of bounds");
+ return error::kNoError;
+ }
GLint max_length = 0;
glGetProgramiv(
service_id, GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH, &max_length);
@@ -15296,14 +15303,8 @@ error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVarying(
GLsizei length = 0;
GLsizei size = 0;
GLenum type = 0;
- LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetTransformFeedbackVarying");
glGetTransformFeedbackVarying(
service_id, index, max_length, &length, &size, &type, &buffer[0]);
- GLenum error = glGetError();
- if (error != GL_NO_ERROR) {
- LOCAL_SET_GL_ERROR(error, "glGetTransformFeedbackVarying", "");
- return error::kNoError;
- }
result->success = 1; // true.
result->size = static_cast<int32_t>(size);
result->type = static_cast<uint32_t>(type);
@@ -15317,7 +15318,7 @@ error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVarying(
error::Error GLES2DecoderImpl::HandleGetTransformFeedbackVaryingsCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
- if (!unsafe_es3_apis_enabled())
+ if (!feature_info_->IsWebGL2OrES3Context())
return error::kUnknownCommand;
const volatile gles2::cmds::GetTransformFeedbackVaryingsCHROMIUM& c =
*static_cast<
@@ -17146,7 +17147,7 @@ error::Error GLES2DecoderImpl::HandleUniformBlockBinding(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const char* func_name = "glUniformBlockBinding";
- if (!unsafe_es3_apis_enabled())
+ if (!feature_info_->IsWebGL2OrES3Context())
return error::kUnknownCommand;
const volatile gles2::cmds::UniformBlockBinding& c =
*static_cast<const volatile gles2::cmds::UniformBlockBinding*>(cmd_data);
@@ -17177,7 +17178,7 @@ error::Error GLES2DecoderImpl::HandleClientWaitSync(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
const char* function_name = "glClientWaitSync";
- if (!unsafe_es3_apis_enabled())
+ if (!feature_info_->IsWebGL2OrES3Context())
return error::kUnknownCommand;
const volatile gles2::cmds::ClientWaitSync& c =
*static_cast<const volatile gles2::cmds::ClientWaitSync*>(cmd_data);
@@ -17226,7 +17227,7 @@ error::Error GLES2DecoderImpl::HandleClientWaitSync(
error::Error GLES2DecoderImpl::HandleWaitSync(uint32_t immediate_data_size,
const volatile void* cmd_data) {
const char* function_name = "glWaitSync";
- if (!unsafe_es3_apis_enabled())
+ if (!feature_info_->IsWebGL2OrES3Context())
return error::kUnknownCommand;
const volatile gles2::cmds::WaitSync& c =
*static_cast<const volatile gles2::cmds::WaitSync*>(cmd_data);
@@ -17266,7 +17267,7 @@ GLsync GLES2DecoderImpl::DoFenceSync(GLenum condition, GLbitfield flags) {
error::Error GLES2DecoderImpl::HandleGetInternalformativ(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
- if (!unsafe_es3_apis_enabled())
+ if (!feature_info_->IsWebGL2OrES3Context())
return error::kUnknownCommand;
const volatile gles2::cmds::GetInternalformativ& c =
*static_cast<const volatile gles2::cmds::GetInternalformativ*>(cmd_data);
@@ -17278,7 +17279,8 @@ error::Error GLES2DecoderImpl::HandleGetInternalformativ(
return error::kNoError;
}
if (!validators_->render_buffer_format.IsValid(format)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", format, "format");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetInternalformativ", format,
+ "internalformat");
return error::kNoError;
}
if (!validators_->internal_format_parameter.IsValid(pname)) {
@@ -17360,7 +17362,7 @@ error::Error GLES2DecoderImpl::HandleGetInternalformativ(
error::Error GLES2DecoderImpl::HandleMapBufferRange(
uint32_t immediate_data_size, const volatile void* cmd_data) {
- if (!unsafe_es3_apis_enabled()) {
+ if (!feature_info_->IsWebGL2OrES3Context()) {
return error::kUnknownCommand;
}
@@ -17471,7 +17473,7 @@ error::Error GLES2DecoderImpl::HandleMapBufferRange(
error::Error GLES2DecoderImpl::HandleUnmapBuffer(
uint32_t immediate_data_size, const volatile void* cmd_data) {
- if (!unsafe_es3_apis_enabled()) {
+ if (!feature_info_->IsWebGL2OrES3Context()) {
return error::kUnknownCommand;
}
const char* func_name = "glUnmapBuffer";
« no previous file with comments | « no previous file | gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698