]> granicus.if.org Git - postgresql/commit
Fix datumSerialize infrastructure to not crash on non-varlena data.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 Aug 2017 23:18:11 +0000 (19:18 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 8 Aug 2017 23:18:22 +0000 (19:18 -0400)
commit9bf4068cc321a4d44ac54089ab651a49d89bb567
treebdbd01716a50de1b5e3377b1bb30d16e3e0e2db8
parent77d2c00af78ee12ae0d1cea34605f1e7af3f6d93
Fix datumSerialize infrastructure to not crash on non-varlena data.

Commit 1efc7e538 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
src/backend/utils/adt/datum.c