Merge pull request #391 from SixLabors/defect/390

Fix NullReferenceException in UniversalShaper
This commit is contained in:
James Jackson-South 2024-03-13 16:44:30 +10:00 коммит произвёл GitHub
Родитель d24a330254 58676e05e2
Коммит 5d76f69080
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 46 добавлений и 1 удалений

Просмотреть файл

@ -17,6 +17,7 @@ internal class GlyphShapingData
/// <summary>
/// Initializes a new instance of the <see cref="GlyphShapingData"/> class.
/// </summary>
/// <param name="textRun">The text run.</param>
public GlyphShapingData(TextRun textRun) => this.TextRun = textRun;
/// <summary>

Просмотреть файл

@ -143,7 +143,7 @@ internal sealed class UniversalShaper : DefaultShaper
}
// Assign rphf feature
int limit = substitutionCollection[match.StartIndex].UniversalShapingEngineInfo!.Category == "R"
int limit = substitutionCollection[match.StartIndex + index].UniversalShapingEngineInfo!.Category == "R"
? 1
: Math.Min(3, match.EndIndex - match.StartIndex);

Просмотреть файл

@ -0,0 +1,44 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
#if OS_WINDOWS
using SixLabors.Fonts.Unicode;
namespace SixLabors.Fonts.Tests.Issues;
public class Issues_388_390
{
[Fact]
public void UniversalShaper_NullReferenceException_388()
{
CodePoint taiLeCharacter = new(0x195C); // ᥜ
CodePoint sundaneseCharacter = new(0x1B9B); // ᮛ
CodePoint tifinaghCharacter = new(0x2D43); // ⵃ
CodePoint chamCharacter = new(0xAA43); // ꩃ
CodePoint latainCharacter = new(0x0041); // A
CodePoint hiraganaCharacter = new(0x3042); // あ
FontFamily fontFamily = SystemFonts.Get("Yu Gothic");
Font font = fontFamily.CreateFont(20.0F);
TextOptions textOption = new(font);
_ = TextMeasurer.MeasureBounds($"{latainCharacter}{taiLeCharacter}", textOption);
_ = TextMeasurer.MeasureBounds($"{hiraganaCharacter}{taiLeCharacter}", textOption);
_ = TextMeasurer.MeasureBounds($"{latainCharacter}{sundaneseCharacter}", textOption);
_ = TextMeasurer.MeasureBounds($"{hiraganaCharacter}{sundaneseCharacter}", textOption);
_ = TextMeasurer.MeasureBounds($"{latainCharacter}{tifinaghCharacter}", textOption);
_ = TextMeasurer.MeasureBounds($"{hiraganaCharacter}{tifinaghCharacter}", textOption);
_ = TextMeasurer.MeasureBounds($"{latainCharacter}{chamCharacter}", textOption);
_ = TextMeasurer.MeasureBounds($"{hiraganaCharacter}{chamCharacter}", textOption);
}
[Fact]
public void UniversalShaper_NullReferenceException_390()
{
const string s = " 꿹ꓴ/ꥀ냘";
FontFamily fontFamily = SystemFonts.Get("Arial");
Font font = new(fontFamily, 10f);
_ = TextMeasurer.MeasureBounds(s, new TextOptions(font));
}
}
#endif