Skip to content

Latest commit

 

History

History
63 lines (45 loc) · 3.41 KB

File metadata and controls

63 lines (45 loc) · 3.41 KB

I did 7 sequential fixes.

I did 7 sequential fixes.

Commits:

  • f4c088e: Fix potential WHILE loop index underflow in executor

The WHILE implementation decremented the parent frame index to re-execute the WHILE node after each body iteration. If the index was already 0 (e.g. due to a GOTO modifying execution state), this would underflow to -1 causing incorrect execution. Add a guard.

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

  • e6bee73: Fix lone trailing $ in interpolateVariables() resolving to "0"

A trailing $ with no following identifier characters produced varName "$" which resolved to "0" via the default. Now a lone $ is emitted as a literal dollar sign instead.

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

  • 5c3ce6f: Fix lexer silently accepting unterminated string literals

readStringLiteral() returned STRING_LITERAL even when the closing quote was missing, causing scripts with typos like TYPE "hello to silently parse as if the string were properly closed. Now returns UNKNOWN token type so the parser reports an error.

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

  • bbc411c: Fix unguarded m_scriptStopAction access in executionFinished lambda

The executionFinished lambda accessed m_scriptStopAction via raw 'this' pointer while other objects in the same lambda used QPointer guards. If MainWindow is destroyed before the lambda fires, this is a use-after-free. Guard it with QPointer like the other members.

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

  • b29f9d0: Fix missing row bounds check in readScreenText()

readScreenText() validated col via the loop condition but never checked row against buf->rows(). Out-of-bounds or negative row values would access invalid memory in buf->character().

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

  • d072c7d: Fix missing scriptExecutor cleanup when closing a tab

When a session tab is closed, macroRecorder was stopped and disconnected but scriptExecutor was not. A running script would continue firing timer callbacks against destroyed widgets, causing use-after-free crashes.

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

  • 56d8074: Fix null pointer dereference in checkExpectCondition()

screenBuffer() can return nullptr if the screen widget is destroyed mid-execution (e.g. tab closed while script runs). The CursorAtPos and CursorAtRow cases called screenBuffer()->cursorPosition() without a null check, causing a crash.

Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

Created by My Badges