From a37535c0dd97c4145bf8675b34ace60abb832ad4 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Nov 2023 20:09:09 +1000 Subject: [PATCH 1/3] Fix null ref exception --- .../DrawWithImageSharp.csproj | 2 +- .../GSub/LookupType5SubTable.cs | 7 ++++++- .../SixLabors.Fonts.Tests/Fonts/BNazanin.ttf | Bin 0 -> 57824 bytes .../Issues/Issues_363.cs | 18 ++++++++++++++++++ tests/SixLabors.Fonts.Tests/TestFonts.cs | 2 ++ 5 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 tests/SixLabors.Fonts.Tests/Fonts/BNazanin.ttf create mode 100644 tests/SixLabors.Fonts.Tests/Issues/Issues_363.cs diff --git a/samples/DrawWithImageSharp/DrawWithImageSharp.csproj b/samples/DrawWithImageSharp/DrawWithImageSharp.csproj index 8c6e4621..880b2b3d 100644 --- a/samples/DrawWithImageSharp/DrawWithImageSharp.csproj +++ b/samples/DrawWithImageSharp/DrawWithImageSharp.csproj @@ -46,7 +46,7 @@ - + diff --git a/src/SixLabors.Fonts/Tables/AdvancedTypographic/GSub/LookupType5SubTable.cs b/src/SixLabors.Fonts/Tables/AdvancedTypographic/GSub/LookupType5SubTable.cs index 3b91c85f..82a2ef97 100644 --- a/src/SixLabors.Fonts/Tables/AdvancedTypographic/GSub/LookupType5SubTable.cs +++ b/src/SixLabors.Fonts/Tables/AdvancedTypographic/GSub/LookupType5SubTable.cs @@ -150,7 +150,12 @@ public override bool TrySubstitution( return false; } - ClassSequenceRuleSetTable ruleSetTable = this.sequenceRuleSetTables[offset]; + ClassSequenceRuleSetTable? ruleSetTable = this.sequenceRuleSetTables[offset]; + if (ruleSetTable is null) + { + return false; + } + SkippingGlyphIterator iterator = new(fontMetrics, collection, index, this.LookupFlags); foreach (ClassSequenceRuleTable ruleTable in ruleSetTable.SequenceRuleTables) { diff --git a/tests/SixLabors.Fonts.Tests/Fonts/BNazanin.ttf b/tests/SixLabors.Fonts.Tests/Fonts/BNazanin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..eb227d7e2e3c4190da32937be6e92b9a5572fb73 GIT binary patch literal 57824 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

!Gr(alC`XofCNzP@Ae3_+%5Y8@`n7O@ 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 GetFullPath("THSarabun.ttf"); + public static string BNazaninFile => GetFullPath("BNazanin.ttf"); + public static Stream TwemojiMozillaData() => OpenStream(TwemojiMozillaFile); public static Stream SegoeuiEmojiData() => OpenStream(SegoeuiEmojiFile); From 88d6d1fe8c194677a96babc7dd211eb3fd1f10fc Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Nov 2023 20:21:10 +1000 Subject: [PATCH 2/3] Fix .NET 7 warnings --- .../Generator.UniversalShapingEngine.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/UnicodeTrieGenerator/Generator.UniversalShapingEngine.cs b/src/UnicodeTrieGenerator/Generator.UniversalShapingEngine.cs index 1b9305f2..18f19e38 100644 --- a/src/UnicodeTrieGenerator/Generator.UniversalShapingEngine.cs +++ b/src/UnicodeTrieGenerator/Generator.UniversalShapingEngine.cs @@ -528,12 +528,13 @@ or 0x2068 if (category != null) { - if (!symbols.ContainsKey(category)) + if (!symbols.TryGetValue(category, out int value)) { - symbols[category] = numSymbols++; + value = numSymbols++; + symbols[category] = value; } - builder.Set(codePoint.Code, (uint)symbols[category]); + builder.Set(codePoint.Code, (uint)value); } if (codePoint.IndicSyllabicCategory == ISC.VowelDependent && codePoint.Decomposition.Any()) From 3ef36aec5f96de1eb8a32a67f5aae7ef1ccb786f Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 30 Nov 2023 20:22:43 +1000 Subject: [PATCH 3/3] Fix .NET 7 warnings --- .../Tables/AdvancedTypographic/Shapers/IndicShaper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SixLabors.Fonts/Tables/AdvancedTypographic/Shapers/IndicShaper.cs b/src/SixLabors.Fonts/Tables/AdvancedTypographic/Shapers/IndicShaper.cs index 6c212768..b77d1a66 100644 --- a/src/SixLabors.Fonts/Tables/AdvancedTypographic/Shapers/IndicShaper.cs +++ b/src/SixLabors.Fonts/Tables/AdvancedTypographic/Shapers/IndicShaper.cs @@ -52,9 +52,9 @@ public IndicShaper(ScriptClass script, Tag unicodeScriptTag, TextOptions textOpt { this.textOptions = textOptions; - if (IndicConfigurations.ContainsKey(script)) + if (IndicConfigurations.TryGetValue(script, out ShapingConfiguration value)) { - this.indicConfiguration = IndicConfigurations[script]; + this.indicConfiguration = value; } else {