Chromium Code Reviews| Index: content/common/gpu/gpu_messages.cc | 
| diff --git a/content/common/gpu/gpu_messages.cc b/content/common/gpu/gpu_messages.cc | 
| index 9c90693c33adeb42fca5cf2ea48896c65fd4bb44..7512a7877195f4749bcee79ed43181272725da2f 100644 | 
| --- a/content/common/gpu/gpu_messages.cc | 
| +++ b/content/common/gpu/gpu_messages.cc | 
| @@ -16,6 +16,7 @@ void ParamTraits<media::BitstreamBuffer>::Write(base::Pickle* m, | 
| const param_type& p) { | 
| WriteParam(m, p.id()); | 
| WriteParam(m, static_cast<uint64_t>(p.size())); | 
| + WriteParam(m, static_cast<int64_t>(p.offset())); | 
| 
 
dcheng
2016/03/01 01:48:43
Does it make sense to DCHECK() that this is non-ne
 
Owen Lin
2016/03/02 02:50:52
I agree with Pawel that
"MapAt() will fail us if t
 
dcheng
2016/03/02 05:58:20
It's not in the contract of SharedMemory::MapAt(),
 
 | 
| WriteParam(m, p.presentation_timestamp()); | 
| WriteParam(m, p.key_id()); | 
| if (!p.key_id().empty()) { | 
| @@ -30,7 +31,9 @@ bool ParamTraits<media::BitstreamBuffer>::Read(const base::Pickle* m, | 
| param_type* r) { | 
| DCHECK(r); | 
| uint64_t size = 0; | 
| + int64_t offset = 0; | 
| if (!(ReadParam(m, iter, &r->id_) && ReadParam(m, iter, &size) && | 
| + ReadParam(m, iter, &offset) && | 
| ReadParam(m, iter, &r->presentation_timestamp_) && | 
| ReadParam(m, iter, &r->key_id_))) | 
| return false; | 
| @@ -42,6 +45,13 @@ bool ParamTraits<media::BitstreamBuffer>::Read(const base::Pickle* m, | 
| } | 
| r->size_ = checked_size.ValueOrDie(); | 
| + base::CheckedNumeric<off_t> checked_offset(offset); | 
| + if (!checked_offset.IsValid()) { | 
| 
 
dcheng
2016/03/01 01:48:43
Similarly, does it make sense to assert that the v
 
Owen Lin
2016/03/02 02:50:52
See above.
 
 | 
| + DLOG(ERROR) << "Invalid offset: " << offset; | 
| + return false; | 
| + } | 
| + r->offset_ = checked_offset.ValueOrDie(); | 
| + | 
| if (!r->key_id_.empty()) { | 
| if (!(ReadParam(m, iter, &r->iv_) && ReadParam(m, iter, &r->subsamples_))) | 
| return false; |