Unknown6656 / AutoIt-Interpreter

A C# AutoIt interpreter designed to be platform-independent
GNU Affero General Public License v3.0
36 stars 10 forks source link

[BUG] Crashes on `if 0 then` in interactive mode #201

Open Unknown6656 opened 2 months ago

Unknown6656 commented 2 months ago

Bug Description

Crashes with the following stack trace:

[System.ArgumentOutOfRangeException] "Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')":
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.get_CurrentLineContent() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 343
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.MoveToEndOf(BlockStatementType type) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 644
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.<>c__DisplayClass77_0.<ProcessStatement>b__38(Variant condition) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 1008
   at Unknown6656.AutoIt3.Runtime.FunctionReturnValue.<>c__DisplayClass12_0.<IfNonFatal>b__0(ValueTuple`3 t) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\FunctionReturnValue.cs:line 80
   at Unknown6656.Union`2.Case1.Match[T](Func`2 func0, Func`2 func1)
   at Unknown6656.AutoIt3.Runtime.FunctionReturnValue.IfNonFatal(Func`2 function) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\FunctionReturnValue.cs:line 80
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.<>c__DisplayClass77_0.<ProcessStatement>b__15(Match m) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 1002
   at Unknown6656.Common.StringExtensions.Match[T](String input, T default, ValueTuple`2[] patterns)
   at Unknown6656.Common.StringExtensions.Match[T](String input, T default, Dictionary`2 patterns)
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.<>c__DisplayClass77_0.<ProcessStatement>b__0() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 705
   at Unknown6656.AutoIt3.Telemetry.Measure[T](TelemetryCategory category, Func`1 function) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Telemetry.cs:line 136
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.ProcessStatement(String line) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 703
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.<>c__DisplayClass74_0.<ParseCurrentLine>g__TryDo|1(Func`2 func) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 564
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.<>c__DisplayClass74_0.<ParseCurrentLine>b__0() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 567
   at Unknown6656.AutoIt3.Telemetry.<>c__DisplayClass19_0.<Measure>b__0() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Telemetry.cs:line 125
   at Unknown6656.AutoIt3.Telemetry.Measure[T](TelemetryCategory category, Func`1 function) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Telemetry.cs:line 136
   at Unknown6656.AutoIt3.Telemetry.Measure(TelemetryCategory category, Action function) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Telemetry.cs:line 123
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.ParseCurrentLine() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 562
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.<>c__DisplayClass64_0.<InternalExec>b__0() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 407
   at Unknown6656.AutoIt3.Telemetry.Measure[T](TelemetryCategory category, Func`1 function) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Telemetry.cs:line 136
   at Unknown6656.AutoIt3.Runtime.AU3CallFrame.InternalExec(Variant[] args) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 402
   at Unknown6656.AutoIt3.Runtime.CallFrame.<>c__DisplayClass26_0.<Execute>b__2() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 143
   at Unknown6656.AutoIt3.Telemetry.Measure[T](TelemetryCategory category, Func`1 function) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Telemetry.cs:line 136
   at Unknown6656.AutoIt3.Runtime.CallFrame.Execute(Variant[] args) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\CallFrame.cs:line 143
   at Unknown6656.AutoIt3.Runtime.AU3Thread.Call(ScriptFunction function, Variant[] args, InterpreterRunContext context) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\AU3Thread.cs:line 150
   at Unknown6656.AutoIt3.Runtime.AU3Thread.<>c__DisplayClass30_0.<Run>b__0() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\AU3Thread.cs:line 105
   at Unknown6656.AutoIt3.Telemetry.Measure[T](TelemetryCategory category, Func`1 function) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Telemetry.cs:line 136
   at Unknown6656.AutoIt3.Runtime.AU3Thread.Run(ScriptFunction function, Variant[] args, InterpreterRunContext context) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\AU3Thread.cs:line 98
   at Unknown6656.AutoIt3.Runtime.Interpreter.Run(ScriptFunction entry_point, Variant[] args, InterpreterRunContext context) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\Interpreter.cs:line 366
   at Unknown6656.AutoIt3.Runtime.Interpreter.Run(ScannedScript script, InterpreterRunContext context) in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\Runtime\Interpreter.cs:line 390
   at Unknown6656.AutoIt3.CLI.InteractiveShell.ProcessInput() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\CommandLineInterface\InteractiveShell.cs:line 987
   at Unknown6656.AutoIt3.CLI.InteractiveShell.HandleKeyPress() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\CommandLineInterface\InteractiveShell.cs:line 467
   at Unknown6656.AutoIt3.CLI.InteractiveShell.MainLoop() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\CommandLineInterface\InteractiveShell.cs:line 282
   at Unknown6656.AutoIt3.CLI.InteractiveShell.Run() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\CommandLineInterface\InteractiveShell.cs:line 208
   at Unknown6656.AutoIt3.CLI.MainProgram.Run() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\CommandLineInterface\MainProgram.cs:line 332
   at Unknown6656.AutoIt3.CLI.MainProgram.<>c__DisplayClass42_0.<Start>b__0() in D:\DEV\AutoIt-Interpreter\src\AutoItInterpreter\CommandLineInterface\MainProgram.cs:line 139
If you believe that this is a bug, please report it to https://github.com/Unknown6656/AutoIt-Interpreter/issues/new?assignees=Unknown6656&labels=bug&projects=Unknown6656%2F2&template=bug_report.yml&title=%5BBUG%5D+.

Steps to reproduce the Bug

  1. Run autoit3 -mi
  2. Type if 0 then
  3. Press Enter

Expected Behavior

No crash, only a syntax error message

Operating System Type

Windows, MacOS, Linux, Other POSIX compliant OS, Other non-POSIX compliant OS

Operating System Architecture

x86, x64, arm, arm64, Other

Operating System Descriptor

Microsoft Windows [Version 10.0.22631.3447]

AutoIt Interpreter Version

+-----------------+
|.. B**           |   AUTOIT3 INTERPRETER
| +*.= o          |     Written by Unknown6656, 2018 - 2024
|..==E. .         |
|.++. ..          |   https://github.com/Unknown6656/AutoIt-Interpreter/
|.o. .  .S        |
|.. .  o.         |   Version 0.12.2466.8669, c94261c5816f150e0db43bd84555b6af69cd3a15
|. +. o.o.        |   B8AAEE301592B51451FBBAF12E21BF1AC2B2C89B8F4611A556C38657220E73F4
|==oo+.+.         |
|B=*B++..         |   Use this image to compare whether two AutoIt versions are equal.
+-----------------+

Additional Information

No response

Unknown6656 commented 2 months ago

same happens with