Reproducible crash (null pointer deref in pane.cpp) when using ctrl+mouse_wheel to change text size #5198

Closed
opened 2026-01-31 00:07:18 +00:00 by claunia · 3 comments
Owner

Originally created by @Treit on GitHub (Nov 26, 2019).

Windows Terminal Version:

0.7.3261.0

Steps to repro:

  1. Open Windows Terminal
  2. Open cmd.exe in a second tab
  3. Type 'dir ' or some other command that will cause the buffer to fill and scroll some text off screen
  4. Type 'notepad ' (the string notepad followed by a space) but don't press .
  5. Scroll the mouse wheel up so the string notepad is no longer visible
  6. Hold the ctrl key and start scrolling the mouse wheel up and down to make the text bigger and smaller.

Expected Result:

No crash

Actual Result:

WindowsTerminal.exe crashes with an Access Violation due to a null pointer dereference at: TerminalApp!Pane::_ControlClosedHandler+0x47 [E:\BA\149\s\src\cascadia\TerminalApp\Pane.cpp @ 320]

Call stack:

(4f68.30d8): Access violation - code c0000005 (!!! second chance !!!)
TerminalApp!winrt::impl::consume_Microsoft_Terminal_TerminalControl_ITermControl<winrt::Microsoft::Terminal::TerminalControl::ITermControl>::ShouldCloseOnExit+0x4 [inlined in TerminalApp!Pane::_ControlClosedHandler+0x47]:
00007ffe`87304c87 488b01          mov     rax,qword ptr [rcx] ds:00000000`00000000=????????????????

0:006> k
# Child-SP          RetAddr           Call Site
00 (Inline Function) --------`-------- TerminalApp!winrt::impl::consume_Microsoft_Terminal_TerminalControl_ITermControl<winrt::Microsoft::Terminal::TerminalControl::ITermControl>::ShouldCloseOnExit+0x4 [E:\BA\149\s\src\cascadia\TerminalApp\lib\Generated Files\winrt\Microsoft.Terminal.TerminalControl.h @ 203] 
01 000000e7`2ccff7d0 00007ffe`8730889e TerminalApp!Pane::_ControlClosedHandler+0x47 [E:\BA\149\s\src\cascadia\TerminalApp\Pane.cpp @ 320] 
02 (Inline Function) --------`-------- TerminalApp!winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs::<lambda_46ba80dcc51cf3954bfd8f3fc42443ae>::operator()+0x7 [E:\BA\149\s\src\cascadia\TerminalApp\lib\Generated Files\winrt\Microsoft.Terminal.TerminalControl.h @ 712] 
03 000000e7`2ccff820 00007ffe`83989cfd TerminalApp!winrt::impl::delegate<winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs,<lambda_46ba80dcc51cf3954bfd8f3fc42443ae> >::Invoke+0xe [E:\BA\149\s\src\cascadia\TerminalApp\lib\Generated Files\winrt\Microsoft.Terminal.TerminalControl.h @ 285] 
04 (Inline Function) --------`-------- TerminalControl!winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs::operator()+0x9 [E:\BA\149\s\src\cascadia\TerminalControl\Generated Files\winrt\Microsoft.Terminal.TerminalControl.h @ 709] 
05 000000e7`2ccff850 00007ffe`8398a952 TerminalControl!winrt::impl::invoke<winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs>+0xd [E:\BA\149\s\src\cascadia\TerminalControl\Generated Files\winrt\base.h @ 5004] 
06 (Inline Function) --------`-------- TerminalControl!winrt::event<winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs>::operator()+0x61 [E:\BA\149\s\src\cascadia\TerminalControl\Generated Files\winrt\base.h @ 5136] 
07 (Inline Function) --------`-------- TerminalControl!winrt::Microsoft::Terminal::TerminalControl::implementation::TermControl::_Create::__l2::<lambda_670e02ff715627521ddcc762b52d01d6>::operator()+0x65 [E:\BA\149\s\src\cascadia\TerminalControl\TermControl.cpp @ 160] 
08 000000e7`2ccff890 00007ffe`8510bccd TerminalControl!winrt::impl::delegate<winrt::Microsoft::Terminal::TerminalConnection::TerminalDisconnectedEventArgs,<lambda_670e02ff715627521ddcc762b52d01d6> >::Invoke+0x72 [E:\BA\149\s\src\cascadia\TerminalControl\Generated Files\winrt\Microsoft.Terminal.TerminalConnection.h @ 85] 
09 (Inline Function) --------`-------- TerminalConnection!winrt::Microsoft::Terminal::TerminalConnection::TerminalDisconnectedEventArgs::operator()+0x9 [E:\BA\149\s\src\cascadia\TerminalConnection\Generated Files\winrt\Microsoft.Terminal.TerminalConnection.h @ 240] 
0a 000000e7`2ccff8d0 00007ffe`851066fd TerminalConnection!winrt::impl::invoke<winrt::Microsoft::Terminal::TerminalConnection::TerminalDisconnectedEventArgs>+0xd [E:\BA\149\s\src\cascadia\TerminalConnection\Generated Files\winrt\base.h @ 5004] 
0b 000000e7`2ccff910 00007ffe`8511e608 TerminalConnection!winrt::event<winrt::Microsoft::Terminal::TerminalConnection::TerminalDisconnectedEventArgs>::operator()<>+0x7d [E:\BA\149\s\src\cascadia\TerminalConnection\Generated Files\winrt\base.h @ 5136] 
0c (Inline Function) --------`-------- TerminalConnection!winrt::Microsoft::Terminal::TerminalConnection::implementation::ConptyConnection::_ClientTerminated+0x14 [E:\BA\149\s\src\cascadia\TerminalConnection\ConptyConnection.cpp @ 228] 
0d (Inline Function) --------`-------- TerminalConnection!winrt::Microsoft::Terminal::TerminalConnection::implementation::ConptyConnection::Start::__l3::<lambda_9178174d629c2f32e2d37826281f74ab>::operator()+0x14 [E:\BA\149\s\src\cascadia\TerminalConnection\ConptyConnection.cpp @ 201] 
0e 000000e7`2ccff950 00007ffe`b66aebac TerminalConnection!<lambda_9178174d629c2f32e2d37826281f74ab>::<lambda_invoker_cdecl>+0x18 [E:\BA\149\s\src\cascadia\TerminalConnection\ConptyConnection.cpp @ 202] 
0f 000000e7`2ccff980 00007ffe`b6682536 ntdll!TppExecuteWaitCallback+0xa4 [minkernel\threadpool\ntdll\wait.c @ 1611] 
10 000000e7`2ccff9d0 00007ffe`b5886fd4 ntdll!TppWorkerThread+0x456 [minkernel\threadpool\ntdll\worker.c @ 1048] 
11 000000e7`2ccffcd0 00007ffe`b66bcf31 KERNEL32!BaseThreadInitThunk+0x14 [clientcore\base\win32\client\thread.c @ 64] 
12 000000e7`2ccffd00 00000000`00000000 ntdll!RtlUserThreadStart+0x21 [minkernel\ntdll\rtlstrt.c @ 1153]

Originally created by @Treit on GitHub (Nov 26, 2019). ## Windows Terminal Version: 0.7.3261.0 ## Steps to repro: 1. Open Windows Terminal 2. Open cmd.exe in a second tab 3. Type 'dir <Enter>' or some other command that will cause the buffer to fill and scroll some text off screen 4. Type 'notepad ' (the string notepad followed by a space) but don't press <Enter>. 5. Scroll the mouse wheel up so the string notepad is no longer visible 6. Hold the ctrl key and start scrolling the mouse wheel up and down to make the text bigger and smaller. ## Expected Result: No crash ## Actual Result: WindowsTerminal.exe crashes with an Access Violation due to a null pointer dereference at: `TerminalApp!Pane::_ControlClosedHandler+0x47 [E:\BA\149\s\src\cascadia\TerminalApp\Pane.cpp @ 320]` ## Call stack: ``` (4f68.30d8): Access violation - code c0000005 (!!! second chance !!!) TerminalApp!winrt::impl::consume_Microsoft_Terminal_TerminalControl_ITermControl<winrt::Microsoft::Terminal::TerminalControl::ITermControl>::ShouldCloseOnExit+0x4 [inlined in TerminalApp!Pane::_ControlClosedHandler+0x47]: 00007ffe`87304c87 488b01 mov rax,qword ptr [rcx] ds:00000000`00000000=???????????????? 0:006> k # Child-SP RetAddr Call Site 00 (Inline Function) --------`-------- TerminalApp!winrt::impl::consume_Microsoft_Terminal_TerminalControl_ITermControl<winrt::Microsoft::Terminal::TerminalControl::ITermControl>::ShouldCloseOnExit+0x4 [E:\BA\149\s\src\cascadia\TerminalApp\lib\Generated Files\winrt\Microsoft.Terminal.TerminalControl.h @ 203] 01 000000e7`2ccff7d0 00007ffe`8730889e TerminalApp!Pane::_ControlClosedHandler+0x47 [E:\BA\149\s\src\cascadia\TerminalApp\Pane.cpp @ 320] 02 (Inline Function) --------`-------- TerminalApp!winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs::<lambda_46ba80dcc51cf3954bfd8f3fc42443ae>::operator()+0x7 [E:\BA\149\s\src\cascadia\TerminalApp\lib\Generated Files\winrt\Microsoft.Terminal.TerminalControl.h @ 712] 03 000000e7`2ccff820 00007ffe`83989cfd TerminalApp!winrt::impl::delegate<winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs,<lambda_46ba80dcc51cf3954bfd8f3fc42443ae> >::Invoke+0xe [E:\BA\149\s\src\cascadia\TerminalApp\lib\Generated Files\winrt\Microsoft.Terminal.TerminalControl.h @ 285] 04 (Inline Function) --------`-------- TerminalControl!winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs::operator()+0x9 [E:\BA\149\s\src\cascadia\TerminalControl\Generated Files\winrt\Microsoft.Terminal.TerminalControl.h @ 709] 05 000000e7`2ccff850 00007ffe`8398a952 TerminalControl!winrt::impl::invoke<winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs>+0xd [E:\BA\149\s\src\cascadia\TerminalControl\Generated Files\winrt\base.h @ 5004] 06 (Inline Function) --------`-------- TerminalControl!winrt::event<winrt::Microsoft::Terminal::TerminalControl::ConnectionClosedEventArgs>::operator()+0x61 [E:\BA\149\s\src\cascadia\TerminalControl\Generated Files\winrt\base.h @ 5136] 07 (Inline Function) --------`-------- TerminalControl!winrt::Microsoft::Terminal::TerminalControl::implementation::TermControl::_Create::__l2::<lambda_670e02ff715627521ddcc762b52d01d6>::operator()+0x65 [E:\BA\149\s\src\cascadia\TerminalControl\TermControl.cpp @ 160] 08 000000e7`2ccff890 00007ffe`8510bccd TerminalControl!winrt::impl::delegate<winrt::Microsoft::Terminal::TerminalConnection::TerminalDisconnectedEventArgs,<lambda_670e02ff715627521ddcc762b52d01d6> >::Invoke+0x72 [E:\BA\149\s\src\cascadia\TerminalControl\Generated Files\winrt\Microsoft.Terminal.TerminalConnection.h @ 85] 09 (Inline Function) --------`-------- TerminalConnection!winrt::Microsoft::Terminal::TerminalConnection::TerminalDisconnectedEventArgs::operator()+0x9 [E:\BA\149\s\src\cascadia\TerminalConnection\Generated Files\winrt\Microsoft.Terminal.TerminalConnection.h @ 240] 0a 000000e7`2ccff8d0 00007ffe`851066fd TerminalConnection!winrt::impl::invoke<winrt::Microsoft::Terminal::TerminalConnection::TerminalDisconnectedEventArgs>+0xd [E:\BA\149\s\src\cascadia\TerminalConnection\Generated Files\winrt\base.h @ 5004] 0b 000000e7`2ccff910 00007ffe`8511e608 TerminalConnection!winrt::event<winrt::Microsoft::Terminal::TerminalConnection::TerminalDisconnectedEventArgs>::operator()<>+0x7d [E:\BA\149\s\src\cascadia\TerminalConnection\Generated Files\winrt\base.h @ 5136] 0c (Inline Function) --------`-------- TerminalConnection!winrt::Microsoft::Terminal::TerminalConnection::implementation::ConptyConnection::_ClientTerminated+0x14 [E:\BA\149\s\src\cascadia\TerminalConnection\ConptyConnection.cpp @ 228] 0d (Inline Function) --------`-------- TerminalConnection!winrt::Microsoft::Terminal::TerminalConnection::implementation::ConptyConnection::Start::__l3::<lambda_9178174d629c2f32e2d37826281f74ab>::operator()+0x14 [E:\BA\149\s\src\cascadia\TerminalConnection\ConptyConnection.cpp @ 201] 0e 000000e7`2ccff950 00007ffe`b66aebac TerminalConnection!<lambda_9178174d629c2f32e2d37826281f74ab>::<lambda_invoker_cdecl>+0x18 [E:\BA\149\s\src\cascadia\TerminalConnection\ConptyConnection.cpp @ 202] 0f 000000e7`2ccff980 00007ffe`b6682536 ntdll!TppExecuteWaitCallback+0xa4 [minkernel\threadpool\ntdll\wait.c @ 1611] 10 000000e7`2ccff9d0 00007ffe`b5886fd4 ntdll!TppWorkerThread+0x456 [minkernel\threadpool\ntdll\worker.c @ 1048] 11 000000e7`2ccffcd0 00007ffe`b66bcf31 KERNEL32!BaseThreadInitThunk+0x14 [clientcore\base\win32\client\thread.c @ 64] 12 000000e7`2ccffd00 00000000`00000000 ntdll!RtlUserThreadStart+0x21 [minkernel\ntdll\rtlstrt.c @ 1153] ```
Author
Owner

@mkitzan commented on GitHub (Nov 30, 2019):

This issue sounds like it's related to #3245.

@mkitzan commented on GitHub (Nov 30, 2019): This issue sounds like it's related to #3245.
Author
Owner

@zadjii-msft commented on GitHub (Dec 2, 2019):

@mkitzan They're definitely similar bugs, but they're the opposite sides of the same coin. #3245/#1856 are both "conhost crashes when I resize with a cooked read", while this bug is more specific to "Terminal crashes when conhost crashes". Both should get fixed independently of one another ☺️

@zadjii-msft commented on GitHub (Dec 2, 2019): @mkitzan They're definitely similar bugs, but they're the opposite sides of the same coin. #3245/#1856 are both "conhost crashes when I resize with a cooked read", while this bug is more specific to "Terminal crashes when conhost crashes". Both should get fixed independently of one another ☺️
Author
Owner

@zadjii-msft commented on GitHub (Mar 16, 2020):

Good news everyone! This half of the bug is resolved. I'd say that #3623 was the one that probably fixed this. Now, instead of the Terminal not washing its hands after going outside, the terminal will survive, displaying the non-graceful exit message:
image

I'm betting this was fixed in v0.8.

Sure, #1856 is still broken, but at least the Terminal has decided to stay inside on this one.

@zadjii-msft commented on GitHub (Mar 16, 2020): Good news everyone! This half of the bug is resolved. I'd say that #3623 was the one that probably fixed this. Now, instead of the Terminal _not washing its hands after going outside_, the terminal will survive, displaying the non-graceful exit message: ![image](https://user-images.githubusercontent.com/18356694/76780918-d7f4bb80-677b-11ea-9750-ff3654bd9a27.png) I'm betting this was fixed in v0.8. Sure, #1856 is still broken, but at least the Terminal has decided to _stay inside_ on this one.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#5198