pgsql: Second try at fixing numeric data passed through an ECPG SQLDA.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Second try at fixing numeric data passed through an ECPG SQLDA.
Date: 2018-11-14 16:28:06
Message-ID: E1gMy1O-000878-6h@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Second try at fixing numeric data passed through an ECPG SQLDA.

In commit ecfd55795, I removed sqlda.c's checks for ndigits != 0 on the
grounds that we should duplicate the state of the numeric value's digit
buffer even when all the digits are zeroes. However, that still isn't
quite right, because another possible state of the digit buffer is
buf == digits == NULL (this occurs for a NaN). As the code now stands,
it'll invoke memcpy with a NULL source address and zero bytecount,
which we know a few platforms crash on. Hence, reinstate the no-copy
short-circuit, but make it test specifically for buf != NULL rather than
some other condition. In hindsight, the ndigits test (added by commit
f2ae9f9c3) was almost certainly meant to fix the NaN case not the
all-zeroes case as the associated thread alleged.

As before, back-patch to all supported versions.

Discussion: https://postgr.es/m/1803D792815FC24D871C00D17AE95905C71161@g01jpexmbkw24

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/f9e25ba140776c01ee4bfdffc611b24a430e0872

Modified Files
--------------
src/interfaces/ecpg/ecpglib/sqlda.c | 25 ++++++++++++++--------
src/interfaces/ecpg/test/expected/sql-sqlda.c | 2 +-
src/interfaces/ecpg/test/expected/sql-sqlda.stderr | 2 +-
src/interfaces/ecpg/test/expected/sql-sqlda.stdout | 8 +++----
src/interfaces/ecpg/test/sql/sqlda.pgc | 2 +-
5 files changed, 23 insertions(+), 16 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2018-11-14 20:41:14 pgsql: Add a timezone-specific variant of date_trunc().
Previous Message Peter Eisentraut 2018-11-14 16:10:30 pgsql: Lower lock level for renaming indexes