pgsql: Avoid use of sscanf() to parse ispell dictionary files.
От | Tom Lane |
---|---|
Тема | pgsql: Avoid use of sscanf() to parse ispell dictionary files. |
Дата | |
Msg-id | E1aTf9o-0001gi-LI@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Avoid use of sscanf() to parse ispell dictionary files. It turns out that on FreeBSD-derived platforms (including OS X), the *scanf() family of functions is pretty much brain-dead about multibyte characters. In particular it will apply isspace() to individual bytes of input even when those bytes are part of a multibyte character, thus allowing false recognition of a field-terminating space. We appear to have little alternative other than instituting a coding rule that *scanf() is not to be used if the input string might contain multibyte characters. (There was some discussion of relying on "%ls", but that probably just moves the portability problem somewhere else, and besides it doesn't fully prevent BSD *scanf() from using isspace().) This patch is a down payment on that: it gets rid of use of sscanf() to parse ispell dictionary files, which are certainly at great risk of having a problem. The code is cleaner this way anyway, though a bit longer. In passing, improve a few comments. Report and patch by Artur Zakirov, reviewed and somewhat tweaked by me. Back-patch to all supported branches. Branch ------ REL9_2_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/64f99a2ee393d80d063078d4afad3a57df028a2a Modified Files -------------- src/backend/tsearch/spell.c | 166 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 153 insertions(+), 13 deletions(-)
В списке pgsql-committers по дате отправления: