scriban / scriban

A fast, powerful, safe and lightweight scripting language and engine for .NET

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Template.ParseLiquid throws ArgumentOutOfRangeException

Metalnem opened this issue · comments

Template.ParseLiquid can sometimes throw ArgumentOutOfRangeException instead of storing error details in the resulting template. Here's the full program that reproduces this:

namespace Scriban.Run
{
  public class Program
  {
    public static void Main(string[] args)
    {
      Template.ParseLiquid(@"{%""\u""");
    }
  }
}

And here's the full stack trace:

Exception has occurred: CLR/System.ArgumentOutOfRangeException
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in Scriban.dll: 'The character '"' is not an hexa [0a-fA-F] character'
   at Scriban.Parsing.Util.HexToInt(Char c)
   at Scriban.Parsing.Parser.ParseString()
   at Scriban.Parsing.Parser.ParseExpression(ScriptNode parentNode, Boolean& hasAnonymousFunction, ScriptExpression parentExpression, Int32 precedence, ParseExpressionMode mode)
   at Scriban.Parsing.Parser.ExpectAndParseExpressionAndAnonymous(ScriptNode parentNode, Boolean& hasAnonymousFunction, ParseExpressionMode mode)
   at Scriban.Parsing.Parser.ParseExpressionStatement()
   at Scriban.Parsing.Parser.TryParseStatement(ScriptStatement parent, ScriptStatement& statement, Boolean& hasEnd)
   at Scriban.Parsing.Parser.ParseBlockStatement(ScriptStatement parentStatement)
   at Scriban.Parsing.Parser.Run()
   at Scriban.Template.ParseInternal(String text, String sourceFilePath)
   at Scriban.Template.ParseLiquid(String text, String sourceFilePath, Nullable`1 parserOptions, Nullable`1 lexerOptions)

I'm using .NET Core 2.2 and the latest NuGet alpha version of Scriban (2.0.0-alpha-005).

Found via SharpFuzz.

Fixed in 2.0.0+