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

Side by Side Diff: chrome/utility/safe_browsing/mac/hfs.cc

Issue 2528243002: Fix silent truncations when extracting values from CheckedNumeric (Closed)
Patch Set: compile fix Created 4 years 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chrome/utility/safe_browsing/mac/hfs.h" 5 #include "chrome/utility/safe_browsing/mac/hfs.h"
6 6
7 #include <libkern/OSByteOrder.h> 7 #include <libkern/OSByteOrder.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <sys/stat.h> 9 #include <sys/stat.h>
10 10
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 current_extent_data_.resize(extent_size.ValueOrDie()); 376 current_extent_data_.resize(extent_size.ValueOrDie());
377 if (!hfs_->stream()->ReadExact(&current_extent_data_[0], 377 if (!hfs_->stream()->ReadExact(&current_extent_data_[0],
378 extent_size.ValueOrDie())) { 378 extent_size.ValueOrDie())) {
379 DLOG(ERROR) << "Failed to read extent " << current_extent_; 379 DLOG(ERROR) << "Failed to read extent " << current_extent_;
380 return false; 380 return false;
381 } 381 }
382 382
383 read_current_extent_ = true; 383 read_current_extent_ = true;
384 } 384 }
385 385
386 size_t extent_offset = fork_logical_offset_ % extent_size.ValueOrDie(); 386 size_t extent_offset = (fork_logical_offset_ % extent_size).ValueOrDie();
387 size_t bytes_to_copy = 387 size_t bytes_to_copy = std::min(
388 std::min(std::min(static_cast<size_t>(fork_.logicalSize) - 388 std::min(
389 fork_logical_offset_, 389 static_cast<size_t>(fork_.logicalSize) - fork_logical_offset_,
390 extent_size.ValueOrDie() - extent_offset), 390 static_cast<size_t>((extent_size - extent_offset).ValueOrDie())),
391 buffer_space_remaining); 391 buffer_space_remaining);
392 392
393 memcpy(&buffer[buffer_size - buffer_space_remaining], 393 memcpy(&buffer[buffer_size - buffer_space_remaining],
394 &current_extent_data_[extent_offset], 394 &current_extent_data_[extent_offset],
395 bytes_to_copy); 395 bytes_to_copy);
396 396
397 buffer_space_remaining -= bytes_to_copy; 397 buffer_space_remaining -= bytes_to_copy;
398 *bytes_read += bytes_to_copy; 398 *bytes_read += bytes_to_copy;
399 fork_logical_offset_ += bytes_to_copy; 399 fork_logical_offset_ += bytes_to_copy;
400 400
401 // If the fork's data have been read, then end the loop. 401 // If the fork's data have been read, then end the loop.
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 return object; 645 return object;
646 } 646 }
647 647
648 bool HFSBTreeIterator::IsKeyUnexported(const base::string16& key) { 648 bool HFSBTreeIterator::IsKeyUnexported(const base::string16& key) {
649 return key == kHFSDirMetadataFolder || 649 return key == kHFSDirMetadataFolder ||
650 key == kHFSMetadataFolder; 650 key == kHFSMetadataFolder;
651 } 651 }
652 652
653 } // namespace dmg 653 } // namespace dmg
654 } // namespace safe_browsing 654 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698