From a67fa754afa277c95be8ba7864f3c82f5a0dc110 Mon Sep 17 00:00:00 2001 From: MarcinZiabek Date: Tue, 15 Mar 2022 11:55:59 +0100 Subject: [PATCH] Fixed NullReferenceException when the text is null --- QuestPDF.Examples/TextExamples.cs | 32 +++++++++++++++++++ .../Text/Items/TextBlockPageNumber.cs | 8 ++--- QuestPDF/Fluent/TextExtensions.cs | 8 +++-- 3 files changed, 42 insertions(+), 6 deletions(-) diff --git a/QuestPDF.Examples/TextExamples.cs b/QuestPDF.Examples/TextExamples.cs index 0382416..eb1973a 100644 --- a/QuestPDF.Examples/TextExamples.cs +++ b/QuestPDF.Examples/TextExamples.cs @@ -339,5 +339,37 @@ namespace QuestPDF.Examples }); }); } + + [Test] + public void DrawingNullTextShouldNotThrowException() + { + RenderingTest + .Create() + .ProduceImages() + .ShowResults() + .RenderDocument(container => + { + container.Page(page => + { + page.Margin(50); + page.PageColor(Colors.White); + + page.Size(PageSizes.A4); + + page.Content().Column(column => + { + column.Item().Text(null); + + column.Item().Text(text => + { + text.Span(null); + text.Line(null); + text.Hyperlink(null, "http://www.questpdf.com"); + text.TotalPages().Format(x => null); + }); + }); + }); + }); + } } } \ No newline at end of file diff --git a/QuestPDF/Elements/Text/Items/TextBlockPageNumber.cs b/QuestPDF/Elements/Text/Items/TextBlockPageNumber.cs index b48b65d..a4ab822 100644 --- a/QuestPDF/Elements/Text/Items/TextBlockPageNumber.cs +++ b/QuestPDF/Elements/Text/Items/TextBlockPageNumber.cs @@ -11,19 +11,19 @@ namespace QuestPDF.Elements.Text.Items public override TextMeasurementResult? Measure(TextMeasurementRequest request) { - SetPageNumber(request.PageContext); + UpdatePageNumberText(request.PageContext); return MeasureWithoutCache(request); } public override void Draw(TextDrawingRequest request) { - SetPageNumber(request.PageContext); + UpdatePageNumberText(request.PageContext); base.Draw(request); } - private void SetPageNumber(IPageContext context) + private void UpdatePageNumberText(IPageContext context) { - Text = Source(context) ?? PageNumberPlaceholder; + Text = Source(context) ?? string.Empty; } } } \ No newline at end of file diff --git a/QuestPDF/Fluent/TextExtensions.cs b/QuestPDF/Fluent/TextExtensions.cs index 3819d40..3de1847 100644 --- a/QuestPDF/Fluent/TextExtensions.cs +++ b/QuestPDF/Fluent/TextExtensions.cs @@ -24,7 +24,7 @@ namespace QuestPDF.Fluent public class TextPageNumberDescriptor : TextSpanDescriptor { - internal PageNumberFormatter FormatFunction { get; private set; } = x => (x ?? 123).ToString(); + internal PageNumberFormatter FormatFunction { get; private set; } = x => x?.ToString() ?? string.Empty; internal TextPageNumberDescriptor(TextStyle textStyle) : base(textStyle) { @@ -92,6 +92,10 @@ namespace QuestPDF.Fluent public TextSpanDescriptor Span(string? text) { var style = DefaultStyle.Clone(); + var descriptor = new TextSpanDescriptor(style); + + if (text == null) + return descriptor; var items = text .Replace("\r", string.Empty) @@ -114,7 +118,7 @@ namespace QuestPDF.Fluent .ToList() .ForEach(TextBlocks.Add); - return new TextSpanDescriptor(style); + return descriptor; } public TextSpanDescriptor Line(string? text)