diff options
author | kbr@chromium.org <kbr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-25 21:52:13 +0000 |
---|---|---|
committer | kbr@chromium.org <kbr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-25 21:52:13 +0000 |
commit | a39370651d9af05bc429312d44d00c6edcc963ff (patch) | |
tree | ef3daeb47dfd411a82314be825ee9abb35a6518f /gpu | |
parent | edde96fd7348eb8ef2523c2e07d76d5a9839ead7 (diff) | |
download | chromium_src-a39370651d9af05bc429312d44d00c6edcc963ff.zip chromium_src-a39370651d9af05bc429312d44d00c6edcc963ff.tar.gz chromium_src-a39370651d9af05bc429312d44d00c6edcc963ff.tar.bz2 |
Defend against NULL pointer dereferences in buggy OpenGL drivers.
BUG=149904
TEST=test case from bug; unit tests
Review URL: https://chromiumcodereview.appspot.com/10989011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@158665 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder.cc | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 7074606..644dfbf 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -1537,7 +1537,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, bool back_buffer_has_stencil_; bool teximage2d_faster_than_texsubimage2d_; - bool bufferdata_faster_than_buffersubdata_; // The last error message set. std::string last_error_; @@ -1991,7 +1990,6 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) back_buffer_has_depth_(false), back_buffer_has_stencil_(false), teximage2d_faster_than_texsubimage2d_(true), - bufferdata_faster_than_buffersubdata_(true), log_message_count_(0), current_decoder_error_(error::kNoError), use_shader_translator_(true), @@ -2039,10 +2037,9 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) use_shader_translator_ = false; } - // TODO(gman): Consider setting these based on GPU and/or driver. + // TODO(gman): Consider setting this based on GPU and/or driver. if (IsAngle()) { teximage2d_faster_than_texsubimage2d_ = false; - bufferdata_faster_than_buffersubdata_ = false; } } @@ -6860,19 +6857,14 @@ void GLES2DecoderImpl::DoBufferData( data = zero.get(); } - if (!bufferdata_faster_than_buffersubdata_ && - size == info->size() && usage == info->usage()) { - glBufferSubData(target, 0, size, data); - info->SetRange(0, size, data); - return; - } - CopyRealGLErrorsToWrapper(); glBufferData(target, size, data, usage); GLenum error = PeekGLError(); if (error == GL_NO_ERROR) { buffer_manager()->SetInfo(info, size, usage); info->SetRange(0, size, data); + } else { + buffer_manager()->SetInfo(info, 0, usage); } } @@ -6919,11 +6911,6 @@ void GLES2DecoderImpl::DoBufferSubData( SetGLError(GL_INVALID_VALUE, "glBufferSubData", "out of range"); return; } - if (bufferdata_faster_than_buffersubdata_ && - offset == 0 && size == info->size()) { - glBufferData(target, size, data, info->usage()); - return; - } glBufferSubData(target, offset, size, data); } |