diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-05 08:14:11 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-05 08:14:11 +0000 |
commit | 0c86dbf56c6f3e82ee748f34dca48aedf962dec2 (patch) | |
tree | 54c8674b9b6d1846f1b7c350494279d48045d4ef /gpu/command_buffer/build_gles2_cmd_buffer.py | |
parent | b69afd6f877e316184c5f8fa7283f10617e66366 (diff) | |
download | chromium_src-0c86dbf56c6f3e82ee748f34dca48aedf962dec2.zip chromium_src-0c86dbf56c6f3e82ee748f34dca48aedf962dec2.tar.gz chromium_src-0c86dbf56c6f3e82ee748f34dca48aedf962dec2.tar.bz2 |
Resubmitting
http://codereview.chromium.org/668131
TEST=none
BUG=none
Review URL: http://codereview.chromium.org/668139
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40721 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/build_gles2_cmd_buffer.py')
-rwxr-xr-x | gpu/command_buffer/build_gles2_cmd_buffer.py | 99 |
1 files changed, 65 insertions, 34 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index 36dd9dd..af2f9b0 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -849,7 +849,7 @@ _FUNCTION_INFO = { 'BindRenderbuffer': {'decoder_func': 'glBindRenderbufferEXT'}, 'BindTexture': {'decoder_func': 'DoBindTexture'}, 'BufferData': {'type': 'Manual', 'immediate': True}, - 'BufferSubData': {'type': 'Data'}, + 'BufferSubData': {'type': 'Data', 'decoder_func': 'DoBufferSubData'}, 'CheckFramebufferStatus': {'decoder_func': 'glCheckFramebufferStatusEXT'}, 'ClearDepthf': {'decoder_func': 'glClearDepth'}, 'CompileShader': {'decoder_func': 'DoCompileShader', 'unit_test': False}, @@ -1715,20 +1715,19 @@ class DataHandler(TypeHandler): name = func.name if name.endswith("Immediate"): name = name[0:-9] - if name == 'BufferData': + if name == 'BufferData' or name == 'BufferSubData': file.Write(" uint32 data_size = size;\n") - elif name == 'BufferSubData': - file.Write(" uint32 data_size = size;\n") - elif name == 'CompressedTexImage2D': - file.Write(" uint32 data_size = imageSize;\n") - elif name == 'CompressedTexSubImage2D': + elif (name == 'CompressedTexImage2D' or + name == 'CompressedTexSubImage2D'): file.Write(" uint32 data_size = imageSize;\n") - elif name == 'TexImage2D': - file.Write(" uint32 data_size = GLES2Util::ComputeImageDataSize(\n") - file.Write(" width, height, format, type, unpack_alignment_);\n") - elif name == 'TexSubImage2D': - file.Write(" uint32 data_size = GLES2Util::ComputeImageDataSize(\n") - file.Write(" width, height, format, type, unpack_alignment_);\n") + elif name == 'TexImage2D' or name == 'TexSubImage2D': + code = """ uint32 data_size; + if (!GLES2Util::ComputeImageDataSize( + width, height, format, type, unpack_alignment_, &data_size)) { + return error::kOutOfBounds; + } +""" + file.Write(code) else: file.Write("// uint32 data_size = 0; // TODO(gman): get correct size!\n") @@ -1819,7 +1818,12 @@ class GENnHandler(TypeHandler): def WriteGetDataSizeCode(self, func, file): """Overrriden from TypeHandler.""" - file.Write(" uint32 data_size = n * sizeof(GLuint);\n") + code = """ uint32 data_size; + if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { + return error::kOutOfBounds; + } +""" + file.Write(code) def WriteHandlerImplementation (self, func, file): """Overrriden from TypeHandler.""" @@ -2072,7 +2076,12 @@ class DELnHandler(TypeHandler): def WriteGetDataSizeCode(self, func, file): """Overrriden from TypeHandler.""" - file.Write(" uint32 data_size = n * sizeof(GLuint);\n") + code = """ uint32 data_size; + if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) { + return error::kOutOfBounds; + } +""" + file.Write(code) def WriteServiceUnitTest(self, func, file): """Overrriden from TypeHandler.""" @@ -2283,11 +2292,17 @@ class GETnHandler(TypeHandler): for arg in all_but_last_args: arg.WriteGetCode(file) - file.Write(" %s params;\n" % last_arg.type) - file.Write(" GLsizei num_values = util_.GLGetNumValuesReturned(pname);\n") - file.Write(" uint32 params_size = num_values * sizeof(*params);\n") - file.Write(" params = GetSharedMemoryAs<%s>(\n" % last_arg.type) - file.Write(" c.params_shm_id, c.params_shm_offset, params_size);\n") + code = """ + %(last_arg_type)s params; + GLsizei num_values = util_.GLGetNumValuesReturned(pname); + uint32 params_size; + if (!SafeMultiplyUint32(num_values, sizeof(*params), ¶ms_size)) { + return error::kOutOfBounds; + } + params = GetSharedMemoryAs<%(last_arg_type)s>( + c.params_shm_id, c.params_shm_offset, params_size); +""" + file.Write(code % {'last_arg_type': last_arg.type}) func.WriteHandlerValidation(file) func.WriteHandlerImplementation(file) file.Write(" return error::kNoError;\n") @@ -2366,9 +2381,16 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { def WriteGetDataSizeCode(self, func, file): """Overrriden from TypeHandler.""" - file.Write(" uint32 data_size = ComputeImmediateDataSize(" - "immediate_data_size, 1, sizeof(%s), %d);\n" % - (func.info.data_type, func.info.count)) + code = """ uint32 data_size; + if (!ComputeDataSize(1, sizeof(%s), %d, &data_size)) { + return error::kOutOfBounds; + } +""" + file.Write(code % (func.info.data_type, func.info.count)) + if func.is_immediate: + file.Write(" if (data_size > immediate_data_size) {\n") + file.Write(" return error::kOutOfBounds;\n") + file.Write(" }\n") def WriteGLES2ImplementationHeader(self, func, file): """Overrriden from TypeHandler.""" @@ -2537,9 +2559,16 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) { def WriteGetDataSizeCode(self, func, file): """Overrriden from TypeHandler.""" - file.Write(" uint32 data_size = ComputeImmediateDataSize(" - "immediate_data_size, 1, sizeof(%s), %d);\n" % - (func.info.data_type, func.info.count)) + code = """ uint32 data_size; + if (!ComputeDataSize(1, sizeof(%s), %d, &data_size)) { + return error::kOutOfBounds; + } +""" + file.Write(code % (func.info.data_type, func.info.count)) + if func.is_immediate: + file.Write(" if (data_size > immediate_data_size) {\n") + file.Write(" return error::kOutOfBounds;\n") + file.Write(" }\n") def WriteGLES2ImplementationHeader(self, func, file): """Overrriden from TypeHandler.""" @@ -3125,15 +3154,17 @@ class STRnHandler(TypeHandler): code = """%(return_type)s %(func_name)s(%(args)s) { helper_->SetBucketSize(kResultBucketId, 0); helper_->%(func_name)s(%(id_name)s, kResultBucketId); - std::string str; - if (GetBucketAsString(kResultBucketId, &str)) { - GLsizei max_size = - std::min(static_cast<size_t>(%(bufsize_name)s) - 1, str.size()); - if (%(length_name)s != NULL) { - *%(length_name)s = max_size; + if (bufsize > 0) { + std::string str; + if (GetBucketAsString(kResultBucketId, &str)) { + GLsizei max_size = + std::min(static_cast<size_t>(%(bufsize_name)s) - 1, str.size()); + if (%(length_name)s != NULL) { + *%(length_name)s = max_size; + } + memcpy(%(dest_name)s, str.c_str(), max_size); + %(dest_name)s[max_size] = '\\0'; } - memcpy(%(dest_name)s, str.c_str(), max_size); - %(dest_name)s[max_size] = '\\0'; } } """ |