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".
Showing
- src/backend/lib/stringinfo.c 3 additions, 2 deletionssrc/backend/lib/stringinfo.c
- src/backend/parser/scansup.c 13 additions, 3 deletionssrc/backend/parser/scansup.c
- src/backend/tsearch/wparser_def.c 8 additions, 1 deletionsrc/backend/tsearch/wparser_def.c
- src/backend/utils/adt/datetime.c 10 additions, 1 deletionsrc/backend/utils/adt/datetime.c
- src/backend/utils/error/elog.c 3 additions, 3 deletionssrc/backend/utils/error/elog.c
- src/bin/psql/command.c 8 additions, 1 deletionsrc/bin/psql/command.c
- src/bin/psql/help.c 9 additions, 9 deletionssrc/bin/psql/help.c
- src/bin/psql/print.c 21 additions, 5 deletionssrc/bin/psql/print.c
- src/interfaces/ecpg/ecpglib/error.c 2 additions, 1 deletionsrc/interfaces/ecpg/ecpglib/error.c
- src/interfaces/ecpg/pgtypeslib/dt_common.c 9 additions, 1 deletionsrc/interfaces/ecpg/pgtypeslib/dt_common.c
- src/interfaces/libpq/fe-misc.c 25 additions, 4 deletionssrc/interfaces/libpq/fe-misc.c
Loading
Please register or sign in to comment