diff options
author | adriansc@chromium.org <adriansc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-02 18:19:43 +0000 |
---|---|---|
committer | adriansc@chromium.org <adriansc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-02 18:19:43 +0000 |
commit | 86d67adb3cc099cc16cee194a4e4457df8d79c05 (patch) | |
tree | 16b290c4a77cec07cf7a885a7c6886794cfc1f47 /ui | |
parent | 5407c3827e3177c6c505d39250502579529d6a83 (diff) | |
download | chromium_src-86d67adb3cc099cc16cee194a4e4457df8d79c05.zip chromium_src-86d67adb3cc099cc16cee194a4e4457df8d79c05.tar.gz chromium_src-86d67adb3cc099cc16cee194a4e4457df8d79c05.tar.bz2 |
Introduced check to ensure that PAK files contain untruncated headers.
See bug for crash report details.
BUG=95119
TEST=ui_unittests:DataPackTest.LoadFileWithTruncatedHeader
Review URL: http://codereview.chromium.org/7830025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@99406 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/base/resource/data_pack.cc | 7 | ||||
-rw-r--r-- | ui/base/resource/data_pack_unittest.cc | 10 | ||||
-rw-r--r-- | ui/base/test/data/data_pack_unittest/truncated-header.pak | 1 |
3 files changed, 18 insertions, 0 deletions
diff --git a/ui/base/resource/data_pack.cc b/ui/base/resource/data_pack.cc index 1fcdfe1..c4b1594 100644 --- a/ui/base/resource/data_pack.cc +++ b/ui/base/resource/data_pack.cc @@ -75,6 +75,13 @@ bool DataPack::Load(const FilePath& path) { return false; } + // Sanity check the header of the file. + if (kHeaderLength > mmap_->length()) { + DLOG(ERROR) << "Data pack file corruption: incomplete file header."; + mmap_.reset(); + return false; + } + // Parse the header of the file. // First uint32: version; second: resource count. const uint32* ptr = reinterpret_cast<const uint32*>(mmap_->data()); diff --git a/ui/base/resource/data_pack_unittest.cc b/ui/base/resource/data_pack_unittest.cc index 0f48097..032196f 100644 --- a/ui/base/resource/data_pack_unittest.cc +++ b/ui/base/resource/data_pack_unittest.cc @@ -37,6 +37,16 @@ TEST(DataPackTest, Load) { ASSERT_FALSE(pack.GetStringPiece(140, &data)); } +TEST(DataPackTest, LoadFileWithTruncatedHeader) { + FilePath data_path; + PathService::Get(base::DIR_SOURCE_ROOT, &data_path); + data_path = data_path.Append(FILE_PATH_LITERAL( + "ui/base/test/data/data_pack_unittest/truncated-header.pak")); + + DataPack pack; + ASSERT_FALSE(pack.Load(data_path)); +} + TEST(DataPackTest, Write) { ScopedTempDir dir; ASSERT_TRUE(dir.CreateUniqueTempDir()); diff --git a/ui/base/test/data/data_pack_unittest/truncated-header.pak b/ui/base/test/data/data_pack_unittest/truncated-header.pak new file mode 100644 index 0000000..3829870 --- /dev/null +++ b/ui/base/test/data/data_pack_unittest/truncated-header.pak @@ -0,0 +1 @@ +42. |