diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 02:29:21 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 02:29:21 +0000 |
commit | f34df9db04b7adaff418b61c35fb1346c1c2fccd (patch) | |
tree | ca9b0e61a1c03f0246b0371423bbbe570193e2f1 /gfx/thebes/SharedFontList.cpp | |
parent | Adding upstream version 115.8.0esr. (diff) | |
download | firefox-esr-f34df9db04b7adaff418b61c35fb1346c1c2fccd.tar.xz firefox-esr-f34df9db04b7adaff418b61c35fb1346c1c2fccd.zip |
Adding upstream version 115.9.0esr.upstream/115.9.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'gfx/thebes/SharedFontList.cpp')
-rw-r--r-- | gfx/thebes/SharedFontList.cpp | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/gfx/thebes/SharedFontList.cpp b/gfx/thebes/SharedFontList.cpp index f97e7e2832..83b389cd16 100644 --- a/gfx/thebes/SharedFontList.cpp +++ b/gfx/thebes/SharedFontList.cpp @@ -168,7 +168,11 @@ class SetCharMapRunnable : public mozilla::Runnable { void Face::SetCharacterMap(FontList* aList, gfxCharacterMap* aCharMap, const Family* aFamily) { if (!XRE_IsParentProcess()) { - std::pair<uint32_t, bool> familyIndex = aFamily->FindIndex(aList); + Maybe<std::pair<uint32_t, bool>> familyIndex = aFamily->FindIndex(aList); + if (!familyIndex) { + NS_WARNING("Family index not found! Ignoring SetCharacterMap"); + return; + } const auto* faces = aFamily->Faces(aList); uint32_t faceIndex = 0; while (faceIndex < aFamily->NumFaces()) { @@ -177,14 +181,17 @@ void Face::SetCharacterMap(FontList* aList, gfxCharacterMap* aCharMap, } ++faceIndex; } - MOZ_RELEASE_ASSERT(faceIndex < aFamily->NumFaces(), "Face ptr not found!"); + if (faceIndex >= aFamily->NumFaces()) { + NS_WARNING("Face not found in family! Ignoring SetCharacterMap"); + return; + } if (NS_IsMainThread()) { dom::ContentChild::GetSingleton()->SendSetCharacterMap( - aList->GetGeneration(), familyIndex.first, familyIndex.second, + aList->GetGeneration(), familyIndex->first, familyIndex->second, faceIndex, *aCharMap); } else { NS_DispatchToMainThread(new SetCharMapRunnable( - aList->GetGeneration(), familyIndex, faceIndex, aCharMap)); + aList->GetGeneration(), familyIndex.value(), faceIndex, aCharMap)); } return; } @@ -629,16 +636,20 @@ void Family::SetupFamilyCharMap(FontList* aList) { if (!XRE_IsParentProcess()) { // |this| could be a Family record in either the Families() or Aliases() // arrays; FindIndex will map it back to its index and which array. - std::pair<uint32_t, bool> index = FindIndex(aList); + Maybe<std::pair<uint32_t, bool>> index = FindIndex(aList); + if (!index) { + NS_WARNING("Family index not found! Ignoring SetupFamilyCharMap"); + return; + } if (NS_IsMainThread()) { dom::ContentChild::GetSingleton()->SendSetupFamilyCharMap( - aList->GetGeneration(), index.first, index.second); + aList->GetGeneration(), index->first, index->second); return; } NS_DispatchToMainThread(NS_NewRunnableFunction( "SetupFamilyCharMap callback", - [gen = aList->GetGeneration(), idx = index.first, - alias = index.second] { + [gen = aList->GetGeneration(), idx = index->first, + alias = index->second] { dom::ContentChild::GetSingleton()->SendSetupFamilyCharMap(gen, idx, alias); })); @@ -685,13 +696,13 @@ void Family::SetupFamilyCharMap(FontList* aList) { } } -std::pair<uint32_t, bool> Family::FindIndex(FontList* aList) const { +Maybe<std::pair<uint32_t, bool>> Family::FindIndex(FontList* aList) const { const auto* start = aList->Families(); const auto* end = start + aList->NumFamilies(); if (this >= start && this < end) { uint32_t index = this - start; MOZ_RELEASE_ASSERT(start + index == this, "misaligned Family ptr!"); - return std::pair(index, false); + return Some(std::pair(index, false)); } start = aList->AliasFamilies(); @@ -699,10 +710,10 @@ std::pair<uint32_t, bool> Family::FindIndex(FontList* aList) const { if (this >= start && this < end) { uint32_t index = this - start; MOZ_RELEASE_ASSERT(start + index == this, "misaligned AliasFamily ptr!"); - return std::pair(index, true); + return Some(std::pair(index, true)); } - MOZ_CRASH("invalid font-list Family ptr!"); + return Nothing(); } FontList::FontList(uint32_t aGeneration) { |