
This issue trackerhas been migrated toGitHub, and is currentlyread-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.
Created on2017-05-02 17:46 byeryksun, last changed2022-04-11 14:58 byadmin. This issue is nowclosed.
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 7911 | merged | valer,2018-06-25 17:04 | |
| PR 8342 | merged | miss-islington,2018-07-19 22:34 | |
| PR 8343 | merged | steve.dower,2018-07-19 22:41 | |
| Messages (7) | |||
|---|---|---|---|
| msg292791 -(view) | Author: Eryk Sun (eryksun)*![]() | Date: 2017-05-02 17:46 | |
When ReadConsole is canceled by CancelSynchronousIo [1], for some reason the call still succeeds. It's probably related to the hack that maps STATUS_ALERTED to ERROR_OPERATION_ABORTED when a console read is interrupted by Ctrl+C.The problem is that, when canceled, ReadConsole doesn't update the value of lpNumberOfCharsRead. Thus in read_console_w inModules/_io/winconsoleio.c, the value of `n` is a random number that gets added to `readlen`, which is subsequently used to index into `buf`. The problem is the same for `n_read` in _PyOS_WindowsConsoleReadline.For example, in 3.6: import sys, ctypes, threading kernel32 = ctypes.WinDLL('kernel32') hMain = kernel32.OpenThread(1, 0, kernel32.GetCurrentThreadId()) t = threading.Timer(30, kernel32.CancelSynchronousIo, (hMain,)) t.start() sys.stdin.readline() Breakpoint 0 hit KERNELBASE!ReadConsoleW: 00007ffc`fb558200 4053 push rbx 0:000> pt KERNELBASE!GetImmersiveColorTypeFromName+0x49d2: 00007ffc`fb5d2672 c3 ret 0:000> r rax rax=0000000000000001 0:000> ?? @$teb->LastErrorValue == 995 bool true 0:000> gu python36!read_console_w+0x8b: 00000000`6e43a483 85c0 test eax,eax 0:000> ?? n unsigned long 0xefdc39e8 0:000> g (1154.11fc): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. python36!read_console_w+0x11f: 00000000`6e43a517 66833a0a cmp word ptr [rdx],0Ah ds:000001e8`cfb72c7e=????If the value of `n` is initialized to (DWORD)-1, then checking for a failed or canceled call could be implemented as follows: if (!res || (n == (DWORD)-1 && GetLastError() == ERROR_OPERATION_ABORTED)) { err = GetLastError(); break; }[1]:https://msdn.microsoft.com/en-us/library/ms684958 | |||
| msg292793 -(view) | Author: Eryk Sun (eryksun)*![]() | Date: 2017-05-02 17:54 | |
Oops, I pasted the MSDN link for ReadConsole instead of CancelSynchronousIo [1].[1]:https://msdn.microsoft.com/en-us/library/aa363794 | |||
| msg321970 -(view) | Author: Steve Dower (steve.dower)*![]() | Date: 2018-07-19 22:34 | |
New changesetce75df3031c86b78311b1ad76c39c0b39d7d7424 by Steve Dower (ValeriyaSinevich) in branch 'master':bpo-30237: Output error when ReadConsole is canceled by CancelSynchronousIo. (GH-7911)https://github.com/python/cpython/commit/ce75df3031c86b78311b1ad76c39c0b39d7d7424 | |||
| msg322621 -(view) | Author: Steve Dower (steve.dower)*![]() | Date: 2018-07-29 09:32 | |
New changesetc3af73d580888b4d444264e79dce6ec0818522cd by Steve Dower (Miss Islington (bot)) in branch '3.7':bpo-30237: Output error when ReadConsole is canceled by CancelSynchronousIo. (GH-7911)https://github.com/python/cpython/commit/c3af73d580888b4d444264e79dce6ec0818522cd | |||
| msg322622 -(view) | Author: Steve Dower (steve.dower)*![]() | Date: 2018-07-29 09:32 | |
New changeset28bbbdabb1e3601047530febac1b05b7b89dc65e by Steve Dower in branch '3.6':bpo-30237: Output error when ReadConsole is canceled by CancelSynchronousIo. (GH-7911)https://github.com/python/cpython/commit/28bbbdabb1e3601047530febac1b05b7b89dc65e | |||
| msg348322 -(view) | Author: Zackery Spytz (ZackerySpytz)*![]() | Date: 2019-07-23 05:54 | |
PR 7911 was merged and backported. Should this issue be closed? | |||
| msg348337 -(view) | Author: Steve Dower (steve.dower)*![]() | Date: 2019-07-23 15:42 | |
Yep, thanks for the ping! | |||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:58:45 | admin | set | github: 74423 |
| 2019-07-23 15:42:40 | steve.dower | set | status: open -> closed resolution: fixed messages: +msg348337 stage: patch review -> resolved |
| 2019-07-23 05:54:16 | ZackerySpytz | set | nosy: +ZackerySpytz messages: +msg348322 |
| 2018-07-29 09:32:32 | steve.dower | set | messages: +msg322622 |
| 2018-07-29 09:32:05 | steve.dower | set | messages: +msg322621 |
| 2018-07-19 22:41:07 | steve.dower | set | pull_requests: +pull_request7877 |
| 2018-07-19 22:34:49 | miss-islington | set | pull_requests: +pull_request7876 |
| 2018-07-19 22:34:11 | steve.dower | set | messages: +msg321970 |
| 2018-06-25 17:04:52 | valer | set | keywords: +patch stage: test needed -> patch review pull_requests: +pull_request7514 |
| 2017-05-02 17:54:11 | eryksun | set | messages: +msg292793 |
| 2017-05-02 17:46:07 | eryksun | create | |