On Sat, Feb 6, 2021 at 5:00 AM Sergey Burladyan <eshkinkot@gmail.com> wrote:
Currently pgagent doesn't handle unicode correctly.
CharToWString function corrupt multibyte characters because it processes string one byte at a time: 148 std::string s = std::string(cstr); 149 std::wstring wsTmp(s.begin(), s.end());
WStringToChar function does not take into account that there can be _multi_byte character on wcstombs output and create buffer with size = wcslen: 157 int wstr_length = wcslen(wchar_str); 158 char *dst = new char[wstr_length + 10];
Also pgagent do not setup locale with setlocale(), without it all wcs/mbs functions cannot handle multibyte strings.
=== postgres log === 2021-02-05 23:19:05 UTC [15600-1] postgres@postgres ERROR: unterminated quoted string at or near "'" at character 8 2021-02-05 23:19:05 UTC [15600-2] postgres@postgres STATEMENT: select ' ====================
Please see attached patch. I only test it on GNU/Linux and can't test it on Windows, sorry.
Thanks for the patch! Neel/Ashesh; can you take a look please? It looks OK to me, but then I'm not overly familiar with multibyte string handling. What, if anything, needs to be done on Windows?