fix(windows/conpty): pass HPCON value, not &hPC (v0.7.8) #18
Reference in New Issue
Block a user
Delete Branch "release/v0.7.8"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Régression v0.7.6 : terminaux en fenêtre externe
Symptôme : depuis v0.7.6, cliquer PowerShell / cmd / WSL dans le tab Terminal ouvre une fenêtre console externe au lieu de s'afficher dans xterm.js. v0.7.5 marchait.
Cause
Le binding ConPTY de v0.7.6 passait
&hPC(pointeur vers variable Go locale) àUpdateProcThreadAttribute(PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE, ...). C'est un quirk Win32 : pour cet attribut spécifique,lpValuedoit être la valeur du handle (cast en PVOID), pas un pointeur vers une variable. Avec&hPCle kernel lit des octets aléatoires, l'attribut est silencieusement ignoré, etCreateProcessWcrée une console fraîche pour l'enfant — d'où la fenêtre externe.Fix
1 ligne :
Conforme à :
github.com/UserExistsError/conptygithub.com/aymanbagabas/go-ptyVersioning
Test plan
User reported regression introduced in v0.7.6: PowerShell / cmd open in a separate external console window instead of attaching to the xterm.js tab (v0.7.5 worked). Root cause: the ConPTY wiring used attrList.Update(PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE, unsafe.Pointer(&hPC), // ← wrong unsafe.Sizeof(hPC)) The PSEUDOCONSOLE attribute is a Win32 API quirk: lpValue must be the HPCON *value* (cast to PVOID), not a pointer to the local variable holding the handle. With &hPC the kernel reads garbage, silently drops the attribute, and CreateProcessW spawns the child with a fresh console — hence the external window. Fix is one line: unsafe.Pointer(uintptr(hPC)) Confirmed against Microsoft's EchoCon sample and Go libraries that work in production (UserExistsError/conpty, aymanbagabas/go-pty). - internal/version/version.go: 0.7.7 → 0.7.8 - CHANGELOG.md: v0.7.8 entry with the diagnostic write-up