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

Side by Side Diff: content/common/cc_messages.cc

Issue 1619363002: Add compile time checks against longs being used in IPC structs on 32 bit Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: one more per Dmitry Created 4 years, 10 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
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 #include "content/common/cc_messages.h" 5 #include "content/common/cc_messages.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "cc/output/compositor_frame.h" 10 #include "cc/output/compositor_frame.h"
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 break; 179 break;
180 case cc::FilterOperation::ALPHA_THRESHOLD: 180 case cc::FilterOperation::ALPHA_THRESHOLD:
181 NOTREACHED(); 181 NOTREACHED();
182 break; 182 break;
183 } 183 }
184 l->append(")"); 184 l->append(")");
185 } 185 }
186 186
187 void ParamTraits<cc::FilterOperations>::Write( 187 void ParamTraits<cc::FilterOperations>::Write(
188 Message* m, const param_type& p) { 188 Message* m, const param_type& p) {
189 WriteParam(m, p.size()); 189 WriteParam(m, static_cast<uint32_t>(p.size()));
190 for (std::size_t i = 0; i < p.size(); ++i) { 190 for (std::size_t i = 0; i < p.size(); ++i) {
191 WriteParam(m, p.at(i)); 191 WriteParam(m, p.at(i));
192 } 192 }
193 } 193 }
194 194
195 bool ParamTraits<cc::FilterOperations>::Read(const Message* m, 195 bool ParamTraits<cc::FilterOperations>::Read(const Message* m,
196 base::PickleIterator* iter, 196 base::PickleIterator* iter,
197 param_type* r) { 197 param_type* r) {
198 size_t count; 198 uint32_t count;
199 if (!ReadParam(m, iter, &count)) 199 if (!ReadParam(m, iter, &count))
200 return false; 200 return false;
201 201
202 for (std::size_t i = 0; i < count; ++i) { 202 for (std::size_t i = 0; i < count; ++i) {
203 cc::FilterOperation op = cc::FilterOperation::CreateEmptyFilter(); 203 cc::FilterOperation op = cc::FilterOperation::CreateEmptyFilter();
204 if (!ReadParam(m, iter, &op)) 204 if (!ReadParam(m, iter, &op))
205 return false; 205 return false;
206 r->Append(op); 206 r->Append(op);
207 } 207 }
208 return true; 208 return true;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 l->append(") "); 296 l->append(") ");
297 } 297 }
298 298
299 void ParamTraits<cc::RenderPass>::Write( 299 void ParamTraits<cc::RenderPass>::Write(
300 Message* m, const param_type& p) { 300 Message* m, const param_type& p) {
301 WriteParam(m, p.id); 301 WriteParam(m, p.id);
302 WriteParam(m, p.output_rect); 302 WriteParam(m, p.output_rect);
303 WriteParam(m, p.damage_rect); 303 WriteParam(m, p.damage_rect);
304 WriteParam(m, p.transform_to_root_target); 304 WriteParam(m, p.transform_to_root_target);
305 WriteParam(m, p.has_transparent_background); 305 WriteParam(m, p.has_transparent_background);
306 WriteParam(m, p.quad_list.size()); 306 WriteParam(m, static_cast<uint32_t>(p.quad_list.size()));
307 307
308 cc::SharedQuadStateList::ConstIterator shared_quad_state_iter = 308 cc::SharedQuadStateList::ConstIterator shared_quad_state_iter =
309 p.shared_quad_state_list.begin(); 309 p.shared_quad_state_list.begin();
310 cc::SharedQuadStateList::ConstIterator last_shared_quad_state_iter = 310 cc::SharedQuadStateList::ConstIterator last_shared_quad_state_iter =
311 p.shared_quad_state_list.end(); 311 p.shared_quad_state_list.end();
312 for (const auto& quad : p.quad_list) { 312 for (const auto& quad : p.quad_list) {
313 DCHECK(quad->rect.Contains(quad->visible_rect)) 313 DCHECK(quad->rect.Contains(quad->visible_rect))
314 << quad->material << " rect: " << quad->rect.ToString() 314 << quad->material << " rect: " << quad->rect.ToString()
315 << " visible_rect: " << quad->visible_rect.ToString(); 315 << " visible_rect: " << quad->visible_rect.ToString();
316 DCHECK(quad->opaque_rect.IsEmpty() || 316 DCHECK(quad->opaque_rect.IsEmpty() ||
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 } 400 }
401 401
402 bool ParamTraits<cc::RenderPass>::Read(const Message* m, 402 bool ParamTraits<cc::RenderPass>::Read(const Message* m,
403 base::PickleIterator* iter, 403 base::PickleIterator* iter,
404 param_type* p) { 404 param_type* p) {
405 cc::RenderPassId id; 405 cc::RenderPassId id;
406 gfx::Rect output_rect; 406 gfx::Rect output_rect;
407 gfx::Rect damage_rect; 407 gfx::Rect damage_rect;
408 gfx::Transform transform_to_root_target; 408 gfx::Transform transform_to_root_target;
409 bool has_transparent_background; 409 bool has_transparent_background;
410 size_t quad_list_size; 410 uint32_t quad_list_size;
411 411
412 if (!ReadParam(m, iter, &id) || !ReadParam(m, iter, &output_rect) || 412 if (!ReadParam(m, iter, &id) || !ReadParam(m, iter, &output_rect) ||
413 !ReadParam(m, iter, &damage_rect) || 413 !ReadParam(m, iter, &damage_rect) ||
414 !ReadParam(m, iter, &transform_to_root_target) || 414 !ReadParam(m, iter, &transform_to_root_target) ||
415 !ReadParam(m, iter, &has_transparent_background) || 415 !ReadParam(m, iter, &has_transparent_background) ||
416 !ReadParam(m, iter, &quad_list_size)) 416 !ReadParam(m, iter, &quad_list_size))
417 return false; 417 return false;
418 418
419 p->SetAll(id, 419 p->SetAll(id,
420 output_rect, 420 output_rect,
421 damage_rect, 421 damage_rect,
422 transform_to_root_target, 422 transform_to_root_target,
423 has_transparent_background); 423 has_transparent_background);
424 424
425 for (size_t i = 0; i < quad_list_size; ++i) { 425 for (uint32_t i = 0; i < quad_list_size; ++i) {
426 cc::DrawQuad::Material material; 426 cc::DrawQuad::Material material;
427 base::PickleIterator temp_iter = *iter; 427 base::PickleIterator temp_iter = *iter;
428 if (!ReadParam(m, &temp_iter, &material)) 428 if (!ReadParam(m, &temp_iter, &material))
429 return false; 429 return false;
430 430
431 cc::DrawQuad* draw_quad = NULL; 431 cc::DrawQuad* draw_quad = NULL;
432 switch (material) { 432 switch (material) {
433 case cc::DrawQuad::DEBUG_BORDER: 433 case cc::DrawQuad::DEBUG_BORDER:
434 draw_quad = ReadDrawQuad<cc::DebugBorderDrawQuad>(m, iter, p); 434 draw_quad = ReadDrawQuad<cc::DebugBorderDrawQuad>(m, iter, p);
435 break; 435 break;
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 size_t to_reserve = sizeof(p.device_scale_factor); 674 size_t to_reserve = sizeof(p.device_scale_factor);
675 to_reserve += p.resource_list.size() * sizeof(cc::TransferableResource); 675 to_reserve += p.resource_list.size() * sizeof(cc::TransferableResource);
676 for (const auto& pass : p.render_pass_list) { 676 for (const auto& pass : p.render_pass_list) {
677 to_reserve += sizeof(size_t) * 2; 677 to_reserve += sizeof(size_t) * 2;
678 to_reserve += ReserveSizeForRenderPassWrite(*pass); 678 to_reserve += ReserveSizeForRenderPassWrite(*pass);
679 } 679 }
680 m->Reserve(to_reserve); 680 m->Reserve(to_reserve);
681 681
682 WriteParam(m, p.device_scale_factor); 682 WriteParam(m, p.device_scale_factor);
683 WriteParam(m, p.resource_list); 683 WriteParam(m, p.resource_list);
684 WriteParam(m, p.render_pass_list.size()); 684 WriteParam(m, static_cast<uint32_t>(p.render_pass_list.size()));
685 for (const auto& pass : p.render_pass_list) { 685 for (const auto& pass : p.render_pass_list) {
686 WriteParam(m, pass->quad_list.size()); 686 WriteParam(m, static_cast<uint32_t>(pass->quad_list.size()));
687 WriteParam(m, pass->shared_quad_state_list.size()); 687 WriteParam(m, static_cast<uint32_t>(pass->shared_quad_state_list.size()));
688 WriteParam(m, *pass); 688 WriteParam(m, *pass);
689 } 689 }
690 } 690 }
691 691
692 bool ParamTraits<cc::DelegatedFrameData>::Read(const Message* m, 692 bool ParamTraits<cc::DelegatedFrameData>::Read(const Message* m,
693 base::PickleIterator* iter, 693 base::PickleIterator* iter,
694 param_type* p) { 694 param_type* p) {
695 if (!ReadParam(m, iter, &p->device_scale_factor)) 695 if (!ReadParam(m, iter, &p->device_scale_factor))
696 return false; 696 return false;
697 697
698 const static size_t kMaxRenderPasses = 10000; 698 const static size_t kMaxRenderPasses = 10000;
699 const static size_t kMaxSharedQuadStateListSize = 100000; 699 const static size_t kMaxSharedQuadStateListSize = 100000;
700 const static size_t kMaxQuadListSize = 1000000; 700 const static size_t kMaxQuadListSize = 1000000;
701 701
702 std::set<cc::RenderPassId> pass_set; 702 std::set<cc::RenderPassId> pass_set;
703 703
704 size_t num_render_passes; 704 uint32_t num_render_passes;
705 if (!ReadParam(m, iter, &p->resource_list) || 705 if (!ReadParam(m, iter, &p->resource_list) ||
706 !ReadParam(m, iter, &num_render_passes) || 706 !ReadParam(m, iter, &num_render_passes) ||
707 num_render_passes > kMaxRenderPasses || num_render_passes == 0) 707 num_render_passes > kMaxRenderPasses || num_render_passes == 0)
708 return false; 708 return false;
709 for (size_t i = 0; i < num_render_passes; ++i) { 709 for (uint32_t i = 0; i < num_render_passes; ++i) {
710 size_t quad_list_size; 710 uint32_t quad_list_size;
711 size_t shared_quad_state_list_size; 711 uint32_t shared_quad_state_list_size;
712 if (!ReadParam(m, iter, &quad_list_size) || 712 if (!ReadParam(m, iter, &quad_list_size) ||
713 !ReadParam(m, iter, &shared_quad_state_list_size) || 713 !ReadParam(m, iter, &shared_quad_state_list_size) ||
714 quad_list_size > kMaxQuadListSize || 714 quad_list_size > kMaxQuadListSize ||
715 shared_quad_state_list_size > kMaxSharedQuadStateListSize) 715 shared_quad_state_list_size > kMaxSharedQuadStateListSize)
716 return false; 716 return false;
717 scoped_ptr<cc::RenderPass> render_pass = 717 scoped_ptr<cc::RenderPass> render_pass =
718 cc::RenderPass::Create(shared_quad_state_list_size, quad_list_size); 718 cc::RenderPass::Create(
719 static_cast<size_t>(shared_quad_state_list_size),
720 static_cast<size_t>(quad_list_size));
719 if (!ReadParam(m, iter, render_pass.get())) 721 if (!ReadParam(m, iter, render_pass.get()))
720 return false; 722 return false;
721 // Validate that each RenderPassDrawQuad points at a valid RenderPass 723 // Validate that each RenderPassDrawQuad points at a valid RenderPass
722 // earlier in the frame. 724 // earlier in the frame.
723 for (const auto* quad : render_pass->quad_list) { 725 for (const auto* quad : render_pass->quad_list) {
724 if (quad->material != cc::DrawQuad::RENDER_PASS) 726 if (quad->material != cc::DrawQuad::RENDER_PASS)
725 continue; 727 continue;
726 const cc::RenderPassDrawQuad* rpdq = 728 const cc::RenderPassDrawQuad* rpdq =
727 cc::RenderPassDrawQuad::MaterialCast(quad); 729 cc::RenderPassDrawQuad::MaterialCast(quad);
728 if (!pass_set.count(rpdq->render_pass_id)) 730 if (!pass_set.count(rpdq->render_pass_id))
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 l->append("TextureDrawQuad::OverlayResources(["); 846 l->append("TextureDrawQuad::OverlayResources([");
845 for (size_t i = 0; i < cc::DrawQuad::Resources::kMaxResourceIdCount; ++i) { 847 for (size_t i = 0; i < cc::DrawQuad::Resources::kMaxResourceIdCount; ++i) {
846 LogParam(p.size_in_pixels[i], l); 848 LogParam(p.size_in_pixels[i], l);
847 if (i < (cc::DrawQuad::Resources::kMaxResourceIdCount - 1)) 849 if (i < (cc::DrawQuad::Resources::kMaxResourceIdCount - 1))
848 l->append(", "); 850 l->append(", ");
849 } 851 }
850 l->append("])"); 852 l->append("])");
851 } 853 }
852 854
853 } // namespace IPC 855 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698