From 68418d7f2abb997da308a736280ef2a27e67c686 Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Mon, 13 Sep 2021 18:56:03 +0200 Subject: [PATCH 1/2] Add failing test --- .../Media/PathMarkupParserTests.cs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs b/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs index c5ad705654..ba8c490829 100644 --- a/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs +++ b/tests/Avalonia.Visuals.UnitTests/Media/PathMarkupParserTests.cs @@ -297,5 +297,28 @@ namespace Avalonia.Visuals.UnitTests.Media Assert.Equal(new Point(20, 20), figure.StartPoint); } } + + [Fact] + public void Should_Parse_Flags_Without_Separator() + { + var pathGeometry = new PathGeometry(); + using (var context = new PathGeometryContext(pathGeometry)) + using (var parser = new PathMarkupParser(context)) + { + parser.Parse("a.898.898 0 01.27.188"); + + var figure = pathGeometry.Figures[0]; + + var segments = figure.Segments; + + Assert.NotNull(segments); + + Assert.Equal(1, segments.Count); + + var arcSegment = segments[0]; + + Assert.IsType(arcSegment); + } + } } } From 5b09e7a60ee7cf283a9a7040a6980a370ed8b32e Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Mon, 13 Sep 2021 18:56:26 +0200 Subject: [PATCH 2/2] Fix flag parsing --- src/Avalonia.Visuals/Media/PathMarkupParser.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Visuals/Media/PathMarkupParser.cs b/src/Avalonia.Visuals/Media/PathMarkupParser.cs index 9fefcb6645..8b9d0833db 100644 --- a/src/Avalonia.Visuals/Media/PathMarkupParser.cs +++ b/src/Avalonia.Visuals/Media/PathMarkupParser.cs @@ -496,12 +496,18 @@ namespace Avalonia.Media private bool ReadBool(ref ReadOnlySpan span) { - if (!ReadArgument(ref span, out var boolValue) || boolValue.Length != 1) + span = SkipWhitespace(span); + + if (span.IsEmpty) { throw new InvalidDataException("Invalid bool rule."); } - switch (boolValue[0]) + var c = span[0]; + + span = span.Slice(1); + + switch (c) { case '0': return false;