postgres.git / summary / log / commit / refs

commit    630aceda5be79551b6772ab230fddfc4edbb63eb
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Sat Nov 25 19:42:10 2017 +0000

    Avoid formally-undefined use of memcpy() in hstoreUniquePairs().
    
    hstoreUniquePairs() often called memcpy with equal source and destination
    pointers.  Although this is almost surely harmless in practice, it's
    undefined according to the letter of the C standard.  Some versions of
    valgrind will complain about it, and some versions of libc as well
    (cf. commit ad520ec4a).  Tweak the code to avoid doing that.
    
    Noted by Tomas Vondra.  Back-patch to all supported versions because
    of the hazard of libc assertions.
    
    Discussion: https://postgr.es/m/bf84d940-90d4-de91-19dd-612e011007f4@fuzzy.cz


contrib/hstore/hstore_io.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c index 0c1d99a0150..f763b7cb25b 100644 --- a/contrib/hstore/hstore_io.c +++ b/contrib/hstore/hstore_io.c @@ -340,7 +340,8 @@ hstoreUniquePairs(Pairs *a, int32 l, int32 *buflen) { *buflen += res->keylen + ((res->isnull) ? 0 : res->vallen); res++; - memcpy(res, ptr, sizeof(Pairs)); + if (res != ptr) + memcpy(res, ptr, sizeof(Pairs)); } ptr++; [parent: 497e79b96135]