From ef9895f8d3a661bf9f3bbc573cd150055bd0bcfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?SAL=C4=B0H=20=C3=96ZKARA?= Date: Tue, 16 Sep 2025 14:06:18 +0300 Subject: [PATCH] Handle missing closer in Scriban section renderer Added checks for the presence of the 'Closer' string before substring operations in ScribanDocumentSectionRenderer. This prevents exceptions when the closer is not found in the document content. --- .../ScribanDocumentSectionRenderer.cs | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Rendering/ScribanDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Rendering/ScribanDocumentSectionRenderer.cs index 02881c5a67..53a8aea6fc 100644 --- a/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Rendering/ScribanDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Rendering/ScribanDocumentSectionRenderer.cs @@ -213,12 +213,15 @@ public class ScribanDocumentSectionRenderer : IDocumentSectionRenderer documentContent.IndexOf(Opener, StringComparison.Ordinal) + Opener.Length ); - var betweenJsonOpenerAndCloser = afterJsonOpener.Substring(0, - afterJsonOpener.IndexOf(Closer, StringComparison.Ordinal) - ); + var closerIndex = afterJsonOpener.IndexOf(Closer, StringComparison.Ordinal); + if(closerIndex < 0) + { + break; + } + var betweenJsonOpenerAndCloser = afterJsonOpener.Substring(0, closerIndex); documentContent = afterJsonOpener.Substring( - afterJsonOpener.IndexOf(Closer, StringComparison.Ordinal) + Closer.Length + closerIndex + Closer.Length ); if (!betweenJsonOpenerAndCloser.Contains(DocsTemplates)) @@ -257,9 +260,12 @@ public class ScribanDocumentSectionRenderer : IDocumentSectionRenderer document.IndexOf(Opener, StringComparison.Ordinal) + Opener.Length ); - var betweenJsonOpenerAndCloser = afterJsonOpener.Substring(0, - afterJsonOpener.IndexOf(Closer, StringComparison.Ordinal) - ); + var closerIndex = afterJsonOpener.IndexOf(Closer, StringComparison.Ordinal); + if (closerIndex < 0) + { + break; + } + var betweenJsonOpenerAndCloser = afterJsonOpener.Substring(0, closerIndex); if (!betweenJsonOpenerAndCloser.Contains(DocsTemplates)) {