• Tom Lane's avatar
    Second try at fixing numeric data passed through an ECPG SQLDA. · 06c72344
    Tom Lane authored
    In commit ecfd5579, 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
    f2ae9f9c) 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
    06c72344
sql-sqlda.stderr 25.2 KB