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

Side by Side Diff: media/formats/mp4/box_definitions.cc

Issue 2648433002: MSE: Fix Mp4 SAIO parsing overflow (Closed)
Patch Set: Rebase onto trun fix Created 3 years, 11 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 | media/formats/mp4/box_reader_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "media/formats/mp4/box_definitions.h" 5 #include "media/formats/mp4/box_definitions.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 const SampleAuxiliaryInformationOffset& other) = default; 117 const SampleAuxiliaryInformationOffset& other) = default;
118 SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() {} 118 SampleAuxiliaryInformationOffset::~SampleAuxiliaryInformationOffset() {}
119 FourCC SampleAuxiliaryInformationOffset::BoxType() const { return FOURCC_SAIO; } 119 FourCC SampleAuxiliaryInformationOffset::BoxType() const { return FOURCC_SAIO; }
120 120
121 bool SampleAuxiliaryInformationOffset::Parse(BoxReader* reader) { 121 bool SampleAuxiliaryInformationOffset::Parse(BoxReader* reader) {
122 RCHECK(reader->ReadFullBoxHeader()); 122 RCHECK(reader->ReadFullBoxHeader());
123 if (reader->flags() & 1) 123 if (reader->flags() & 1)
124 RCHECK(reader->SkipBytes(8)); 124 RCHECK(reader->SkipBytes(8));
125 125
126 uint32_t count; 126 uint32_t count;
127 RCHECK(reader->Read4(&count) && 127 RCHECK(reader->Read4(&count));
128 reader->HasBytes(count * (reader->version() == 1 ? 8 : 4))); 128 int bytes_per_offset = reader->version() == 1 ? 8 : 4;
129
130 // |bytes_needed| is potentially 64-bit. Cast |count| from uint32_t to size_t
131 // to avoid multiplication overflow.
sandersd (OOO until July 31) 2017/01/18 23:09:01 This comment should explain that we want size_t to
chcunningham 2017/01/18 23:43:50 Done.
132 base::CheckedNumeric<size_t> bytes_needed =
133 base::CheckMul(bytes_per_offset, static_cast<size_t>(count));
134 RCHECK_MEDIA_LOGGED(bytes_needed.IsValid(), reader->media_log(),
135 "Extreme SAIO count exceeds implementation limit.");
136 RCHECK(reader->HasBytes(bytes_needed.ValueOrDie()));
137
138 RCHECK(count <= offsets.max_size());
129 offsets.resize(count); 139 offsets.resize(count);
130 140
131 for (uint32_t i = 0; i < count; i++) { 141 for (uint32_t i = 0; i < count; i++) {
132 if (reader->version() == 1) { 142 if (reader->version() == 1) {
133 RCHECK(reader->Read8(&offsets[i])); 143 RCHECK(reader->Read8(&offsets[i]));
134 } else { 144 } else {
135 RCHECK(reader->Read4Into8(&offsets[i])); 145 RCHECK(reader->Read4Into8(&offsets[i]));
136 } 146 }
137 } 147 }
138 return true; 148 return true;
(...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1359 SampleDependsOn IndependentAndDisposableSamples::sample_depends_on( 1369 SampleDependsOn IndependentAndDisposableSamples::sample_depends_on(
1360 size_t i) const { 1370 size_t i) const {
1361 if (i >= sample_depends_on_.size()) 1371 if (i >= sample_depends_on_.size())
1362 return kSampleDependsOnUnknown; 1372 return kSampleDependsOnUnknown;
1363 1373
1364 return sample_depends_on_[i]; 1374 return sample_depends_on_[i];
1365 } 1375 }
1366 1376
1367 } // namespace mp4 1377 } // namespace mp4
1368 } // namespace media 1378 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | media/formats/mp4/box_reader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698