Commit e97cbfb0 authored by Mark Mentovai's avatar Mark Mentovai Committed by Commit Bot

Remove variable-length arrays in the macOS disk image sniffer

This enables compiling this code with -Wvla.

safe_browsing::DiskImageTypeSnifferMac::AppleDiskImageTrailerSize was a
non-constexpr function whose implementation was hidden in
disk_image_type_sniffer_mac.cc, preventing its return value, no matter
how constant it actually was, from being used to size arrays statically
at compile time in other translation units, such as
archive_analyzer_results.cc. This changes it to be a constexpr variable,
kAppleDiskImageTrailerSize, which can be used to size arrays statically
at compile time.

Change-Id: I35d4582ce8446c9f90d8a6d8576c9d60115c5de8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2363069Reviewed-by: default avatarDaniel Rubery <drubery@chromium.org>
Commit-Queue: Mark Mentovai <mark@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799215}
parent 443f08f1
......@@ -113,9 +113,9 @@ void UpdateArchiveAnalyzerResultsWithFile(base::FilePath path,
uint32_t magic;
file->Read(0, reinterpret_cast<char*>(&magic), sizeof(uint32_t));
char dmg_header[DiskImageTypeSnifferMac::AppleDiskImageTrailerSize()];
char dmg_header[DiskImageTypeSnifferMac::kAppleDiskImageTrailerSize];
file->Read(0, dmg_header,
DiskImageTypeSnifferMac::AppleDiskImageTrailerSize());
DiskImageTypeSnifferMac::kAppleDiskImageTrailerSize);
current_entry_is_executable =
FileTypePolicies::GetInstance()->IsCheckedBinaryFile(path) ||
......@@ -123,20 +123,20 @@ void UpdateArchiveAnalyzerResultsWithFile(base::FilePath path,
DiskImageTypeSnifferMac::IsAppleDiskImageTrailer(
base::span<const uint8_t>(
reinterpret_cast<const uint8_t*>(dmg_header),
DiskImageTypeSnifferMac::AppleDiskImageTrailerSize()));
DiskImageTypeSnifferMac::kAppleDiskImageTrailerSize));
// We can skip checking the trailer if we already know the file is executable.
if (!current_entry_is_executable) {
char trailer[DiskImageTypeSnifferMac::AppleDiskImageTrailerSize()];
char trailer[DiskImageTypeSnifferMac::kAppleDiskImageTrailerSize];
file->Seek(base::File::Whence::FROM_END,
DiskImageTypeSnifferMac::AppleDiskImageTrailerSize());
file->ReadAtCurrentPos(
trailer, DiskImageTypeSnifferMac::AppleDiskImageTrailerSize());
DiskImageTypeSnifferMac::kAppleDiskImageTrailerSize);
file->ReadAtCurrentPos(trailer,
DiskImageTypeSnifferMac::kAppleDiskImageTrailerSize);
current_entry_is_executable =
DiskImageTypeSnifferMac::IsAppleDiskImageTrailer(
base::span<const uint8_t>(
reinterpret_cast<const uint8_t*>(trailer),
DiskImageTypeSnifferMac::AppleDiskImageTrailerSize()));
DiskImageTypeSnifferMac::kAppleDiskImageTrailerSize));
}
#else
......
......@@ -11,7 +11,6 @@ namespace {
const uint8_t kKolySignature[4] = {'k', 'o', 'l', 'y'};
constexpr size_t kSizeKolySignatureInBytes = sizeof(kKolySignature);
const size_t kSizeKolyTrailerInBytes = 512;
} // namespace
......@@ -30,7 +29,7 @@ bool DiskImageTypeSnifferMac::IsAppleDiskImage(const base::FilePath& dmg_file) {
char data[kSizeKolySignatureInBytes];
if (file.Seek(base::File::FROM_END, -1 * kSizeKolyTrailerInBytes) == -1)
if (file.Seek(base::File::FROM_END, -1 * kAppleDiskImageTrailerSize) == -1)
return false;
if (file.ReadAtCurrentPos(data, kSizeKolySignatureInBytes) !=
......@@ -54,11 +53,8 @@ bool DiskImageTypeSnifferMac::IsAppleDiskImageTrailer(
0);
}
// static
size_t DiskImageTypeSnifferMac::AppleDiskImageTrailerSize() {
return kSizeKolyTrailerInBytes;
}
DiskImageTypeSnifferMac::~DiskImageTypeSnifferMac() = default;
constexpr size_t DiskImageTypeSnifferMac::kAppleDiskImageTrailerSize;
} // namespace safe_browsing
......@@ -27,8 +27,8 @@ class DiskImageTypeSnifferMac
// Returns true when the trailer is a valid trailer for a DMG type.
static bool IsAppleDiskImageTrailer(const base::span<const uint8_t>& trailer);
// Returns the size of a DMG trailer.
static size_t AppleDiskImageTrailerSize();
// The size of a DMG trailer.
static constexpr size_t kAppleDiskImageTrailerSize = 512;
private:
friend class base::RefCountedThreadSafe<DiskImageTypeSnifferMac>;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment