Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix conhost clipboard handling bugs #16457

Merged
merged 8 commits into from
Jan 29, 2024
Merged

Conversation

lhecker
Copy link
Member

@lhecker lhecker commented Dec 12, 2023

conhost has 2 bugs related to clipboard handling:

  • Missing retry on OpenClipboard: When copying to the clipboard
    explorer.exe is very eager to open the clipboard and peek into it.
    I'm not sure why it happens, but I can see CFSDropTarget in the
    call stack. It uses COM RPC and so this takes ~20ms every time.
    That breaks conhost's clipboard randomly during ConsoleBench.
    During non-benchmarks I expect this to break during RDP.
  • Missing null-terminator check during paste: CF_UNICODETEXT is
    documented to be a null-terminated string, which conhost v2
    failed to handle as it relied entirely on GlobalSize.

Additionally, this changeset simplifies the HGLOBAL code slightly
by adding _copyToClipboard to abstract it away.

Validation Steps Performed

@lhecker lhecker added Product-Conhost For issues in the Console codebase Area-Interaction Interacting with the vintage console window (as opposed to driving via API or hooks) Issue-Bug It either shouldn't be doing this or needs an investigation. Priority-3 A description (P3) labels Dec 12, 2023
@lhecker
Copy link
Member Author

lhecker commented Dec 12, 2023

@DHowett This is another PR we could merge into 1.19 inbox if we wanted to. It does fix actual bugs, but they have been in conhost since forever and so I'm not sure how important fixing it ASAP is.

src/interactivity/win32/Clipboard.cpp Outdated Show resolved Hide resolved
src/interactivity/win32/Clipboard.cpp Outdated Show resolved Hide resolved
@microsoft-github-policy-service microsoft-github-policy-service bot added Needs-Author-Feedback The original author of the issue/PR needs to come back and respond to something and removed Needs-Author-Feedback The original author of the issue/PR needs to come back and respond to something labels Dec 12, 2023
@DHowett
Copy link
Member

DHowett commented Jan 29, 2024

@lhecker merge conflict from Tushar's work

@DHowett DHowett enabled auto-merge (squash) January 29, 2024 22:43
@DHowett DHowett merged commit 86c30bd into main Jan 29, 2024
19 of 20 checks passed
@DHowett DHowett deleted the dev/lhecker/fix-clipboard-bugs branch January 29, 2024 23:23
lhecker added a commit that referenced this pull request Jan 30, 2024
conhost has 2 bugs related to clipboard handling:
* Missing retry on `OpenClipboard`: When copying to the clipboard
  explorer.exe is very eager to open the clipboard and peek into it.
  I'm not sure why it happens, but I can see `CFSDropTarget` in the
  call stack. It uses COM RPC and so this takes ~20ms every time.
  That breaks conhost's clipboard randomly during `ConsoleBench`.
  During non-benchmarks I expect this to break during RDP.
* Missing null-terminator check during paste: `CF_UNICODETEXT` is
  documented to be a null-terminated string, which conhost v2
  failed to handle as it relied entirely on `GlobalSize`.

Additionally, this changeset simplifies the `HGLOBAL` code slightly
by adding `_copyToClipboard` to abstract it away.

* `ConsoleBench` (#16453) doesn't fail randomly anymore ✅

(cherry picked from commit 86c30bd)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area-Interaction Interacting with the vintage console window (as opposed to driving via API or hooks) Issue-Bug It either shouldn't be doing this or needs an investigation. Priority-3 A description (P3) Product-Conhost For issues in the Console codebase
Projects
Status: Rejected
Development

Successfully merging this pull request may close these issues.

3 participants