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

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

Issue 2461023002: command buffer: audit validation of ES3 commands (part 2) (Closed)
Patch Set: update mocked unittests Created 4 years, 2 months 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..2d933b81f89ce6e437cd8597813831f92f66b286 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -13422,7 +13422,7 @@ error::Error GLES2DecoderImpl::HandleTexImage2D(uint32_t immediate_data_size,
error::Error GLES2DecoderImpl::HandleTexImage3D(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 = "glTexImage3D";
@@ -14264,7 +14264,7 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2D(
error::Error GLES2DecoderImpl::HandleTexSubImage3D(
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 = "glTexSubImage3D";
@@ -14480,7 +14480,7 @@ error::Error GLES2DecoderImpl::HandleGetUniformiv(
error::Error GLES2DecoderImpl::HandleGetUniformuiv(
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::GetUniformuiv& c =
@@ -14657,7 +14657,7 @@ error::Error GLES2DecoderImpl::HandleGetActiveUniform(
error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockiv(
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::GetActiveUniformBlockiv& c =
*static_cast<const volatile gles2::cmds::GetActiveUniformBlockiv*>(
@@ -14678,7 +14678,11 @@ error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockiv(
"glGetActiveActiveUniformBlockiv", "program not linked");
return error::kNoError;
}
- LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetActiveUniformBlockiv");
+ if (index >= program->uniform_block_size_info().size()) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glGetActiveUniformBlockiv",
+ "uniformBlockIndex >= active uniform blocks");
+ return error::kNoError;
+ }
GLsizei num_values = 1;
if (pname == GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) {
GLint num = 0;
@@ -14704,19 +14708,14 @@ error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockiv(
return error::kInvalidArguments;
}
glGetActiveUniformBlockiv(service_id, index, pname, params);
- GLenum error = glGetError();
- if (error == GL_NO_ERROR) {
- result->SetNumResults(num_values);
- } else {
- LOCAL_SET_GL_ERROR(error, "GetActiveUniformBlockiv", "");
- }
+ result->SetNumResults(num_values);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockName(
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::GetActiveUniformBlockName& c =
*static_cast<const volatile gles2::cmds::GetActiveUniformBlockName*>(
@@ -14747,6 +14746,11 @@ error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockName(
"glGetActiveActiveUniformBlockName", "program not linked");
return error::kNoError;
}
+ if (index >= program->uniform_block_size_info().size()) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glGetActiveUniformBlockName",
+ "uniformBlockIndex >= active uniform blocks");
+ return error::kNoError;
+ }
GLint max_length = 0;
glGetProgramiv(
service_id, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, &max_length);
@@ -14771,7 +14775,7 @@ error::Error GLES2DecoderImpl::HandleGetActiveUniformBlockName(
error::Error GLES2DecoderImpl::HandleGetActiveUniformsiv(
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::GetActiveUniformsiv& c =
*static_cast<const volatile gles2::cmds::GetActiveUniformsiv*>(cmd_data);
@@ -14803,6 +14807,15 @@ error::Error GLES2DecoderImpl::HandleGetActiveUniformsiv(
if (!program) {
return error::kNoError;
}
+ GLint activeUniforms = 0;
+ program->GetProgramiv(GL_ACTIVE_UNIFORMS, &activeUniforms);
+ for (int i = 0; i < count; i++) {
+ if (indices[i] >= static_cast<GLuint>(activeUniforms)) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
+ "glGetActiveUniformsiv", "index >= active uniforms");
+ return error::kNoError;
+ }
+ }
GLuint service_id = program->service_id();
GLint link_status = GL_FALSE;
glGetProgramiv(service_id, GL_LINK_STATUS, &link_status);
@@ -14811,14 +14824,8 @@ error::Error GLES2DecoderImpl::HandleGetActiveUniformsiv(
"glGetActiveUniformsiv", "program not linked");
return error::kNoError;
}
- LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("GetActiveUniformsiv");
glGetActiveUniformsiv(service_id, count, indices, pname, params);
- GLenum error = glGetError();
- if (error == GL_NO_ERROR) {
- result->SetNumResults(count);
- } else {
- LOCAL_SET_GL_ERROR(error, "GetActiveUniformsiv", "");
- }
+ result->SetNumResults(count);
return error::kNoError;
}
« 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