0.64.25 workspace.reorder with out-of-range index crashes app (unchecked Array.insert)
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 84/100
Direção de pesquisa
Comece em WorkspaceReorderCoordinator.reorderWorkspace(tabId:toIndex:isDragOperation:explicitGroupId:) e rastreie como ControlCommandCoordinator.handle(_:) passa o índice do control-socket para ele. Execute workspace.reorder com um toIndex fora do intervalo e verifique se o aplicativo continua em execução enquanto a solicitação é rejeitada com segurança ou tratada como uma operação no-op.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Confirmed customer report
An out-of-range toIndex sent to workspace.reorder over the control socket kills the app with EXC_BREAKPOINT / SIGTRAP on the main thread: Array._checkIndex -> Array.insert(_:at:) in WorkspaceReorderCoordinator.reorderWorkspace(tabId:toIndex:isDragOperation:explicitGroupId:) via ControlCommandCoordinator.handle(_:). No clamping or validation happens before the insert, so any client that computes a bad index (custom sidebar, CLI, extension) gets a guaranteed crash instead of an error.
The reporter was drag-reordering in a custom sidebar (fork of Examples/CustomSidebars/workspaces.js) with 5 workspaces in one window; the drop dispatched workspace.reorder with an index out of range for the internal array, and the whole app died, losing two workspaces from the window.
The reporter notes this is easy to hit from the documented data contract: a sidebar author only has workspaces[i].index to work from, and that value can disagree with the array reorderWorkspace indexes into. The shipped workspaces.js example computes its index the same way.
Evidence
Crash report: cmux-2026-09-21-143234.ips, incident 55593AFE-A396-4FB3-ACEE-2D69684271B4.
Workaround (reporter side): clamp the index to [0, count-1] before calling cmux("workspace.reorder").
- Reporter: florian.freudenberg@zenjob.com
Source report: Gmail 1a0c3fddfbb3944b
Environment:
- cmux 0.64.25 (build 106, commit b685a275c)
- macOS 26.6.2 (Build 25G83)
- Mac15,6, Apple M3 Pro, 36 GB
Expected
A control command arriving over the socket should never be able to terminate the app. reorderWorkspace should clamp or early-return on an out-of-range toIndex, making a bad index a no-op error rather than a crash.
- Linguagem predominante
- Swift
- Estrelas
- 27.3k
- Forks
- 2.4k
- Merge médio
- 12h 48min
- PRs com merge (30d)
- 533
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de manaflow-ai/cmux
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
manaflow-ai/cmux#12940 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
manaflow-ai/cmux#12915 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
manaflow-ai/cmux#12873 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
manaflow-ai/cmux#12652 ·
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
manaflow-ai/cmux#12640 ·
Todas as issues de manaflow-ai/cmux
Issues semelhantes
-
type: docs
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 95/100
googleapis/google-cloud-swift#971 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
bitcoindevkit/bdk-ffi#1125 ·
-
Move wallpaper setting Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
mozilla-mobile/firefox-ios#35743 ·
-
triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
ionic-team/capacitor#8616 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 80/100
paritytech/host-rust-core#868 ·