diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2016-02-10 19:30:12 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2016-02-10 19:30:12 -0500 |
commit | 64f99a2ee393d80d063078d4afad3a57df028a2a (patch) | |
tree | f891cb7f6fcf363a4734bdb7f699ec938c3697ac /src/tutorial/funcs_new.c | |
parent | a0606058016b7d20406910b7a73e60ddb3e4c9ff (diff) |
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.
Diffstat (limited to 'src/tutorial/funcs_new.c')
0 files changed, 0 insertions, 0 deletions