Fix incorrect lack of Datum conversion in _int_matchsel() REL_14_STABLE github/REL_14_STABLE
authorPeter Eisentraut <peter@eisentraut.org>
Fri, 8 Aug 2025 10:06:06 +0000 (12:06 +0200)
committerPeter Eisentraut <peter@eisentraut.org>
Fri, 8 Aug 2025 10:11:02 +0000 (12:11 +0200)
The code used

    return (Selectivity) 0.0;

where

    PG_RETURN_FLOAT8(0.0);

would be correct.

On 64-bit systems, these are pretty much equivalent, but on 32-bit
systems, PG_RETURN_FLOAT8() correctly produces a pointer, but the old
wrong code would return a null pointer, possibly leading to a crash
elsewhere.

We think this code is actually not reachable because bqarr_in won't
accept an empty query, and there is no other function that will
create query_int values.  But better be safe and not let such
incorrect code lie around.

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/8246d7ff-f4b7-4363-913e-827dadfeb145%40eisentraut.org

contrib/intarray/_int_selfuncs.c

index 38d68c12d231dc48ef92e9fb6df13ba6f4300374..02736e0fd04be5d7d3f34b65793484b03baa7bae 100644 (file)
@@ -178,7 +178,7 @@ _int_matchsel(PG_FUNCTION_ARGS)
    if (query->size == 0)
    {
        ReleaseVariableStats(vardata);
-       return (Selectivity) 0.0;
+       PG_RETURN_FLOAT8(0.0);
    }
 
    /*