Hi On Sat, Feb 6, 2021 at 5:00 AM Sergey Burladyan <eshkin...@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. > > For example: > > === step code === > select 'это проверка кириллицы в теле запроса pgagent' > ================= > > === 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? -- Dave Page Blog: http://pgsnake.blogspot.com Twitter: @pgsnake EDB: http://www.enterprisedb.com