Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Remedy CLI non-UTF8 handling detection flaw noted in a forum post. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
a4c7954b9380dfd3599e521f7fd40b8b |
User & Date: | larrybr 2023-10-30 23:20:45 |
Context
2023-10-31
| ||
17:39 | Fix a problem with SQLITE_ENABLE_FTS5 builds of the non-amalgamation testfixture.exe in Makefile.msc. (check-in: 544091cc user: dan tags: trunk) | |
2023-10-30
| ||
23:20 | Remedy CLI non-UTF8 handling detection flaw noted in a forum post. (check-in: a4c7954b user: larrybr tags: trunk) | |
23:04 | Remedy CLI non-UTF8 handling detection flaw noted in a forum post. (Leaf check-in: 2666b80d user: larrybr tags: win-utf8-io-split) | |
20:35 | Update the autoconf/Makefile.msc so that it aligns with Makefile.msc. (check-in: c4f724de user: drh tags: trunk) | |
Changes
Changes to src/shell.c.in.
︙ | ︙ | |||
640 641 642 643 644 645 646 647 648 649 650 651 | ** ** The console's output code page is momentarily set, then restored. ** So this should only be run when the process is given use of the ** console for either input or output. */ static short ConsoleDoesUTF8(void){ UINT ocp = GetConsoleOutputCP(); CONSOLE_SCREEN_BUFFER_INFO csbInfo = {0}; /* Create an inactive screen buffer with which to do the experiment. */ HANDLE hCSB = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE, 0, 0, CONSOLE_TEXTMODE_BUFFER, NULL); if( hCSB!=INVALID_HANDLE_VALUE ){ | > > < > > | | 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 | ** ** The console's output code page is momentarily set, then restored. ** So this should only be run when the process is given use of the ** console for either input or output. */ static short ConsoleDoesUTF8(void){ UINT ocp = GetConsoleOutputCP(); const char TrialUtf8[] = { '\xC8', '\xAB' }; /* "ȫ" or 2 MBCS characters */ WCHAR aReadBack[1] = { 0 }; /* Read back as 0x022B when decoded as UTF-8. */ CONSOLE_SCREEN_BUFFER_INFO csbInfo = {0}; /* Create an inactive screen buffer with which to do the experiment. */ HANDLE hCSB = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE, 0, 0, CONSOLE_TEXTMODE_BUFFER, NULL); if( hCSB!=INVALID_HANDLE_VALUE ){ COORD cpos = {0,0}; DWORD rbc; SetConsoleCursorPosition(hCSB, cpos); SetConsoleOutputCP(CP_UTF8); /* Write 2 chars which are a single character in UTF-8 but more in MBCS. */ WriteConsoleA(hCSB, TrialUtf8, sizeof(TrialUtf8), NULL, NULL); ReadConsoleOutputCharacterW(hCSB, &aReadBack[0], 1, cpos, &rbc); GetConsoleScreenBufferInfo(hCSB, &csbInfo); SetConsoleOutputCP(ocp); CloseHandle(hCSB); } /* Return 1 if cursor advanced by 1 position, else 0. */ return (short)(csbInfo.dwCursorPosition.X == 1 && aReadBack[0] == 0x022B); } static short in_console = 0; static short out_console = 0; /* ** Determine whether either normal I/O stream is the console, |
︙ | ︙ |