pgsql: ecpg: Fix handling of strings in ORACLE compat code with SQLDA

Поиск
Список
Период
Сортировка
От Michael Paquier
Тема pgsql: ecpg: Fix handling of strings in ORACLE compat code with SQLDA
Дата
Msg-id E1poayI-003cfY-Hb@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
ecpg: Fix handling of strings in ORACLE compat code with SQLDA

When compiled with -C ORACLE, ecpg_get_data() had a one-off issue where
it would incorrectly store the null terminator byte to str[-1] when
varcharsize is 0, which is something that can happen when using SQLDA.
This would eat 1 byte from the previous field stored, corrupting the
results generated.

All the callers of ecpg_get_data() estimate and allocate enough storage
for the data received, and the fix of this commit relies on this
assumption.  Note that this maps to the case where no padding or
truncation is required.

This issue has been introduced by 3b7ab43 with the Oracle compatibility
option, so backpatch down to v11.

Author: Kyotaro Horiguchi
Discussion: https://postgr.es/m/20230410.173500.440060475837236886.horikyota.ntt@gmail.com
Backpatch-through: 11

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/8c746be44002e8f95dcf8e98f58a47ac851563ee

Modified Files
--------------
src/interfaces/ecpg/ecpglib/data.c                 |  19 +-
.../ecpg/test/compat_oracle/char_array.pgc         |  31 ++-
.../ecpg/test/expected/compat_oracle-char_array.c  | 216 +++++++++++++++------
.../test/expected/compat_oracle-char_array.stderr  | 166 +++++++++-------
.../test/expected/compat_oracle-char_array.stdout  |   5 +
5 files changed, 310 insertions(+), 127 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Fix some typos and some incorrectly duplicated words
Следующее
От: Michael Paquier
Дата:
Сообщение: pgsql: ecpg: Avoid C99-ism in newly-added test for Oracle compat