Skip to content

PSReadLine crashes with ArgumentOutOfRangeException on SetCursorPosition when quickly editing long input line (top=29, BufferHeight=29) #5195

Description

@Zzc0595

Prerequisites

  • Write a descriptive title.
  • Make sure you are able to repro it on the latest released version
  • Search the existing issues, especially the pinned issues.

Exception report

# PSReadLine crashes with ArgumentOutOfRangeException on rapid Backspace editing

## Environment
- PowerShell: 7.x (console)
- PSReadLine version: 2.4.5
- Terminal: Windows Console host, BufferHeight = 29

## Bug description
Typing commands and rapidly pressing Backspace caused PSReadLine to crash with
`ArgumentOutOfRangeException` thrown from `SetCursorPosition`:


Exception:
System.Management.Automation.PSArgumentOutOfRangeException:
Cannot process argument transformation on parameter 'top'.
Parameter name: 'top' cannot be greater than '29'


## Reproduction steps
1. Open a PowerShell console with a short window (BufferHeight ~29).
2. Type `vine update`, then `vine inventory`.
3. Press Backspace ~13 times quickly to erase, retype `vine inventory`, press Enter.
4. Press `r` — crash occurs.

## Root cause analysis
- The reported cursor line index is `29`, which is out of the valid range `0..28`
  when BufferHeight == 29.
- The crash happened during input-line redraw after a burst of Backspace keys,
  suggesting PSReadLine's cursor position calculation went out of bounds
  (off-by-one at the bottom edge of the buffer).

## Notes
- This is not caused by the command itself — any command can trigger it when
  the buffer is short and Backspace is pressed rapidly.
- Suggested fix: clamp the cursor `top` coordinate to `[0, BufferHeight-1]`
  before calling `SetCursorPosition`.

## Reporter context
Found while testing **Vine** (https://codeberg.org/Milktown/vine), a
text-instruction-based package manager for Windows. It has nothing to do with
the crash, just FYI — Vine is a neat open-source project worth a look. :)

Screenshot

Image

Environment data

PS Version: 7.6.3
PS HostName: ConsoleHost (Windows Terminal)
PSReadLine Version: 2.4.5
PSReadLine EditMode: Windows
OS: 10.0.19038.1 (WinBuild.160101.0800)
BufferWidth: 120
BufferHeight: 29

Steps to reproduce

Steps to reproduce

  1. Open PowerShell with a window sized so console BufferHeight is exactly 29 (e.g. 80 columns x 29 rows)
  2. Run: vine update
  3. Run: vine inventory
  4. Press Backspace 13 times rapidly (no text may remain, or partial)
  5. Retype: vine inventory
  6. Press Enter
  7. Type a single character, e.g. r — crash happens on redraw

Expected behavior

Expected behavior

  • Cursor line is clamped to valid range (0..BufferHeight-1); typing any character redraws the input line without errors

Actual behavior

Actual behavior

  • PSReadLine throws ArgumentOutOfRangeException: top parameter (29) is out of valid range 0..28
  • Stack: SetCursorPosition <- MoveCursorToEnd <- ... console buffer refresh; entire session crashes and closes

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Needs-Triage 🔍It's a new issue that core contributor team needs to triage.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions