Projects
Extra
chromium-ffmpeg-extra
chromium-98-EnumTable-crash.patch
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File chromium-98-EnumTable-crash.patch of Package chromium-ffmpeg-extra (Revision 23)
Currently displaying revision
23
,
Show latest
diff --git a/components/cast_channel/enum_table.h b/components/cast_channel/enum_table.h index 842553a..89de703 100644 --- a/components/cast_channel/enum_table.h +++ b/components/cast_channel/enum_table.h @@ -8,6 +8,7 @@ #include <cstdint> #include <cstring> #include <ostream> +#include <vector> #include "base/check_op.h" #include "base/notreached.h" @@ -187,7 +188,6 @@ class inline constexpr GenericEnumTableEntry(int32_t value); inline constexpr GenericEnumTableEntry(int32_t value, base::StringPiece str); - GenericEnumTableEntry(const GenericEnumTableEntry&) = delete; GenericEnumTableEntry& operator=(const GenericEnumTableEntry&) = delete; private: @@ -253,7 +253,6 @@ class EnumTable { constexpr Entry(E value, base::StringPiece str) : GenericEnumTableEntry(static_cast<int32_t>(value), str) {} - Entry(const Entry&) = delete; Entry& operator=(const Entry&) = delete; }; @@ -312,15 +311,14 @@ class EnumTable { if (is_sorted_) { const std::size_t index = static_cast<std::size_t>(value); if (ANALYZER_ASSUME_TRUE(index < data_.size())) { - const auto& entry = data_.begin()[index]; + const auto& entry = data_[index]; if (ANALYZER_ASSUME_TRUE(entry.has_str())) return entry.str(); } return absl::nullopt; } return GenericEnumTableEntry::FindByValue( - reinterpret_cast<const GenericEnumTableEntry*>(data_.begin()), - data_.size(), static_cast<int32_t>(value)); + &data_[0], data_.size(), static_cast<int32_t>(value)); } // This overload of GetString is designed for cases where the argument is a @@ -348,8 +346,7 @@ class EnumTable { // enum value directly. absl::optional<E> GetEnum(base::StringPiece str) const { auto* entry = GenericEnumTableEntry::FindByString( - reinterpret_cast<const GenericEnumTableEntry*>(data_.begin()), - data_.size(), str); + &data_[0], data_.size(), str); return entry ? static_cast<E>(entry->value) : absl::optional<E>(); } @@ -364,7 +361,7 @@ class EnumTable { // Align the data on a cache line boundary. alignas(64) #endif - std::initializer_list<Entry> data_; + const std::vector<Entry> data_; bool is_sorted_; constexpr EnumTable(std::initializer_list<Entry> data, bool is_sorted) @@ -376,8 +373,8 @@ class EnumTable { for (std::size_t i = 0; i < data.size(); i++) { for (std::size_t j = i + 1; j < data.size(); j++) { - const Entry& ei = data.begin()[i]; - const Entry& ej = data.begin()[j]; + const Entry& ei = data[i]; + const Entry& ej = data[j]; DCHECK(ei.value != ej.value) << "Found duplicate enum values at indices " << i << " and " << j; DCHECK(!(ei.has_str() && ej.has_str() && ei.str() == ej.str()))
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.