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

Side by Side Diff: gpu/command_buffer/client/gles2_implementation.cc

Issue 2310243002: Supress integer-overflow in TexSubImage2D(3D)Impl (Closed)
Patch Set: clean up Created 4 years, 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // A class to emulate GLES2 over command buffers. 5 // A class to emulate GLES2 over command buffers.
6 6
7 #include "gpu/command_buffer/client/gles2_implementation.h" 7 #include "gpu/command_buffer/client/gles2_implementation.h"
8 8
9 #include <GLES2/gl2.h> 9 #include <GLES2/gl2.h>
10 #include <GLES2/gl2ext.h> 10 #include <GLES2/gl2ext.h>
11 #include <GLES2/gl2extchromium.h> 11 #include <GLES2/gl2extchromium.h>
12 #include <GLES3/gl3.h> 12 #include <GLES3/gl3.h>
13 #include <stddef.h> 13 #include <stddef.h>
14 #include <stdint.h> 14 #include <stdint.h>
15 #include <algorithm> 15 #include <algorithm>
16 #include <map> 16 #include <map>
17 #include <set> 17 #include <set>
18 #include <sstream> 18 #include <sstream>
19 #include <string> 19 #include <string>
20 #include "base/atomic_sequence_num.h" 20 #include "base/atomic_sequence_num.h"
21 #include "base/compiler_specific.h" 21 #include "base/compiler_specific.h"
22 #include "base/numerics/safe_math.h"
22 #include "base/strings/string_split.h" 23 #include "base/strings/string_split.h"
23 #include "base/strings/stringprintf.h" 24 #include "base/strings/stringprintf.h"
24 #include "base/sys_info.h" 25 #include "base/sys_info.h"
25 #include "base/threading/thread_task_runner_handle.h" 26 #include "base/threading/thread_task_runner_handle.h"
26 #include "base/trace_event/memory_allocator_dump.h" 27 #include "base/trace_event/memory_allocator_dump.h"
27 #include "base/trace_event/memory_dump_manager.h" 28 #include "base/trace_event/memory_dump_manager.h"
28 #include "base/trace_event/process_memory_dump.h" 29 #include "base/trace_event/process_memory_dump.h"
29 #include "base/trace_event/trace_event.h" 30 #include "base/trace_event/trace_event.h"
30 #include "gpu/command_buffer/client/buffer_tracker.h" 31 #include "gpu/command_buffer/client/buffer_tracker.h"
31 #include "gpu/command_buffer/client/gles2_cmd_helper.h" 32 #include "gpu/command_buffer/client/gles2_cmd_helper.h"
(...skipping 3027 matching lines...) Expand 10 before | Expand all | Expand 10 after
3059 GLint num_rows = ComputeNumRowsThatFitInBuffer( 3060 GLint num_rows = ComputeNumRowsThatFitInBuffer(
3060 buffer_padded_row_size, unpadded_row_size, buffer->size(), height); 3061 buffer_padded_row_size, unpadded_row_size, buffer->size(), height);
3061 num_rows = std::min(num_rows, height); 3062 num_rows = std::min(num_rows, height);
3062 CopyRectToBuffer( 3063 CopyRectToBuffer(
3063 source, num_rows, unpadded_row_size, pixels_padded_row_size, 3064 source, num_rows, unpadded_row_size, pixels_padded_row_size,
3064 buffer->address(), buffer_padded_row_size); 3065 buffer->address(), buffer_padded_row_size);
3065 helper_->TexSubImage2D( 3066 helper_->TexSubImage2D(
3066 target, level, xoffset, yoffset, width, num_rows, format, type, 3067 target, level, xoffset, yoffset, width, num_rows, format, type,
3067 buffer->shm_id(), buffer->offset(), internal); 3068 buffer->shm_id(), buffer->offset(), internal);
3068 buffer->Release(); 3069 buffer->Release();
3069 yoffset += num_rows; 3070 base::CheckedNumeric<GLint> updated_yoffset = yoffset;
3071 updated_yoffset += num_rows;
3072 yoffset = updated_yoffset.ValueOrDefault(std::numeric_limits<int>::max());
Zhenyao Mo 2016/09/07 02:15:16 Can we generate an INVALID_VALUE instead?
xidachen 2016/09/07 12:23:00 I used GL_INVALID_VALUE. So do we have checks some
3070 source += num_rows * pixels_padded_row_size; 3073 source += num_rows * pixels_padded_row_size;
3071 height -= num_rows; 3074 height -= num_rows;
3072 } 3075 }
3073 } 3076 }
3074 3077
3075 void GLES2Implementation::TexSubImage3DImpl(GLenum target, 3078 void GLES2Implementation::TexSubImage3DImpl(GLenum target,
3076 GLint level, 3079 GLint level,
3077 GLint xoffset, 3080 GLint xoffset,
3078 GLint yoffset, 3081 GLint yoffset,
3079 GLsizei zoffset, 3082 GLsizei zoffset,
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
3151 source + ii * image_size_src, my_height, unpadded_row_size, 3154 source + ii * image_size_src, my_height, unpadded_row_size,
3152 pixels_padded_row_size, buffer_pointer + ii * image_size_dst, 3155 pixels_padded_row_size, buffer_pointer + ii * image_size_dst,
3153 buffer_padded_row_size); 3156 buffer_padded_row_size);
3154 } 3157 }
3155 } else { 3158 } else {
3156 CopyRectToBuffer( 3159 CopyRectToBuffer(
3157 source, my_height, unpadded_row_size, pixels_padded_row_size, 3160 source, my_height, unpadded_row_size, pixels_padded_row_size,
3158 buffer->address(), buffer_padded_row_size); 3161 buffer->address(), buffer_padded_row_size);
3159 } 3162 }
3160 helper_->TexSubImage3D( 3163 helper_->TexSubImage3D(
3161 target, level, xoffset, yoffset + row_index, zoffset + depth_index, 3164 target, level, xoffset, yoffset + row_index, zoffset + depth_index,
Zhenyao Mo 2016/09/07 02:15:16 Here, should we worry about overflow also?
xidachen 2016/09/07 12:23:00 Ah, I totally missed that. Added in the new patch.
3162 width, my_height, my_depth, 3165 width, my_height, my_depth,
3163 format, type, buffer->shm_id(), buffer->offset(), internal); 3166 format, type, buffer->shm_id(), buffer->offset(), internal);
3164 buffer->Release(); 3167 buffer->Release();
3165 3168
3166 total_rows -= num_rows; 3169 total_rows -= num_rows;
3167 if (total_rows > 0) { 3170 if (total_rows > 0) {
3168 GLint num_image_paddings; 3171 GLint num_image_paddings;
3169 if (num_images > 0) { 3172 if (num_images > 0) {
3170 DCHECK_EQ(row_index, 0); 3173 DCHECK_EQ(row_index, 0);
3171 depth_index += num_images; 3174 depth_index += num_images;
(...skipping 3723 matching lines...) Expand 10 before | Expand all | Expand 10 after
6895 cached_extensions_.clear(); 6898 cached_extensions_.clear();
6896 } 6899 }
6897 6900
6898 // Include the auto-generated part of this file. We split this because it means 6901 // Include the auto-generated part of this file. We split this because it means
6899 // we can easily edit the non-auto generated parts right here in this file 6902 // we can easily edit the non-auto generated parts right here in this file
6900 // instead of having to edit some template or the code generator. 6903 // instead of having to edit some template or the code generator.
6901 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h" 6904 #include "gpu/command_buffer/client/gles2_implementation_impl_autogen.h"
6902 6905
6903 } // namespace gles2 6906 } // namespace gles2
6904 } // namespace gpu 6907 } // namespace gpu
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698