Work around a subtle portability problem in use of printf %s format.
Tom Lane <tgl@sss.pgh.pa.us>
Work around a subtle portability problem in use of printf %s format. Depending on which spec you read, field widths and precisions in %s may be counted either in bytes or characters. Our code was assuming bytes, which is wrong at least for glibc's implementation, and in any case libc might have a different idea of the prevailing encoding than we do. Hence, for portable results we must avoid using anything more complex than just "%s" unless the string to be printed is known to be all-ASCII. This patch fixes the cases I could find, including the psql formatting failure reported by Hernan Gonzalez. In HEAD only, I also added comments to some places where it appears safe to continue using "%.*s".
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/lib/stringinfo.c | modified | +3 −2 |
| src/backend/parser/scansup.c | modified | +13 −3 |
| src/backend/tsearch/wparser_def.c | modified | +8 −1 |
| src/backend/utils/adt/datetime.c | modified | +10 −1 |
| src/backend/utils/error/elog.c | modified | +3 −3 |
| src/bin/psql/command.c | modified | +8 −1 |
| src/bin/psql/help.c | modified | +9 −9 |
| src/bin/psql/print.c | modified | +21 −5 |
| src/interfaces/ecpg/ecpglib/error.c | modified | +2 −1 |
| src/interfaces/ecpg/pgtypeslib/dt_common.c | modified | +9 −1 |
| src/interfaces/libpq/fe-misc.c | modified | +25 −4 |