Commit 9bc9f72b authored by Amit Kapila's avatar Amit Kapila

MAXALIGN the target address where we store flattened value.

The API (EOH_flatten_into) that flattens the expanded value representation
expects the target address to be maxaligned.  All it's usage adhere to that
principle except when serializing datums for parallel query.  Fix that
usage.

Diagnosed-by: Tom Lane
Author: Tom Lane and Amit Kapila
Backpatch-through: 9.6
Discussion: https://postgr.es/m/11629.1536550032@sss.pgh.pa.us
parent a33245a8
......@@ -338,8 +338,19 @@ datumSerialize(Datum value, bool isnull, bool typByVal, int typLen,
}
else if (eoh)
{
EOH_flatten_into(eoh, (void *) *start_address, header);
char *tmp;
/*
* EOH_flatten_into expects the target address to be maxaligned,
* so we can't store directly to *start_address.
*/
tmp = (char *) palloc(header);
EOH_flatten_into(eoh, (void *) tmp, header);
memcpy(*start_address, tmp, header);
*start_address += header;
/* be tidy. */
pfree(tmp);
}
else
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment