ENABLE_VIRTUAL_TERMINAL_PROCESSING skips null characters #12168

Open
opened 2026-01-31 03:07:57 +00:00 by claunia · 0 comments
Owner

Originally created by @alabuzhev on GitHub (Jan 23, 2021).

Environment

Windows build number: 10.0.19041.746
Windows Terminal version (if applicable): No

Any other software? No

Steps to reproduce

Historically null characters in console output have been replaced with spaces by the host.
Now, when ENABLE_VIRTUAL_TERMINAL_PROCESSING is set, these characters are completely removed from the output instead.
It breaks screen output logic if the application relies on the previous behavior.

Compile and run the following code:

#include <windows.h>

int main()
{
	const wchar_t Str[] = L"ABC\0XYZ\n";

	const auto Out = GetStdHandle(STD_OUTPUT_HANDLE);

	const auto print = [&]
	{
		DWORD n;
		WriteConsole(Out, Str, ARRAYSIZE(Str) - 1, &n, {});
	};

	print();

	DWORD Mode;
	GetConsoleMode(Out, &Mode);
	SetConsoleMode(Out, Mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);

	print();
}

Expected behavior

ABC XYZ
ABC XYZ

Actual behavior

ABC XYZ
ABCXYZ
Originally created by @alabuzhev on GitHub (Jan 23, 2021). <!-- 🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨 I ACKNOWLEDGE THE FOLLOWING BEFORE PROCEEDING: 1. If I delete this entire template and go my own path, the core team may close my issue without further explanation or engagement. 2. If I list multiple bugs/concerns in this one issue, the core team may close my issue without further explanation or engagement. 3. If I write an issue that has many duplicates, the core team may close my issue without further explanation or engagement (and without necessarily spending time to find the exact duplicate ID number). 4. If I leave the title incomplete when filing the issue, the core team may close my issue without further explanation or engagement. 5. If I file something completely blank in the body, the core team may close my issue without further explanation or engagement. All good? Then proceed! --> <!-- This bug tracker is monitored by Windows Terminal development team and other technical folks. **Important: When reporting BSODs or security issues, DO NOT attach memory dumps, logs, or traces to Github issues**. Instead, send dumps/traces to secure@microsoft.com, referencing this GitHub issue. If this is an application crash, please also provide a Feedback Hub submission link so we can find your diagnostic data on the backend. Use the category "Apps > Windows Terminal (Preview)" and choose "Share My Feedback" after submission to get the link. Please use this form and describe your issue, concisely but precisely, with as much detail as possible. --> # Environment ```none Windows build number: 10.0.19041.746 Windows Terminal version (if applicable): No Any other software? No ``` # Steps to reproduce Historically null characters in console output have been replaced with spaces by the host. Now, when `ENABLE_VIRTUAL_TERMINAL_PROCESSING` is set, these characters are completely removed from the output instead. It breaks screen output logic if the application relies on the previous behavior. <!-- A description of how to trigger this bug. --> Compile and run the following code: ```C++ #include <windows.h> int main() { const wchar_t Str[] = L"ABC\0XYZ\n"; const auto Out = GetStdHandle(STD_OUTPUT_HANDLE); const auto print = [&] { DWORD n; WriteConsole(Out, Str, ARRAYSIZE(Str) - 1, &n, {}); }; print(); DWORD Mode; GetConsoleMode(Out, &Mode); SetConsoleMode(Out, Mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING); print(); } ``` # Expected behavior <!-- A description of what you're expecting, possibly containing screenshots or reference material. --> ``` ABC XYZ ABC XYZ ``` # Actual behavior <!-- What's actually happening? --> ``` ABC XYZ ABCXYZ ```
claunia added the Resolution-By-DesignNeeds-TriageNeeds-Tag-Fix labels 2026-01-31 03:07:57 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#12168