• Tom Lane's avatar
    Fix datumSerialize infrastructure to not crash on non-varlena data. · 9bf4068c
    Tom Lane authored
    Commit 1efc7e53 did a poor job of emulating existing logic for touching
    Datums that might be expanded-object pointers.  It didn't check for typlen
    being -1 first, which meant it could crash on fixed-length pass-by-ref
    values, and probably on cstring values as well.  It also didn't use
    DatumGetPointer before VARATT_IS_EXTERNAL_EXPANDED, which while currently
    harmless is not according to documentation nor prevailing style.
    
    I also think the lack of any explanation as to why datumSerialize makes
    these particular nonobvious choices is pretty awful, so fix that.
    
    Per report from Jarred Ward.  Back-patch to 9.6 where this code came in.
    
    Discussion: https://postgr.es/m/6F61E6D2-2F5E-4794-9479-A429BE1CEA4B@simple.com
    9bf4068c
datum.c 11.4 KB