mirror of
https://github.com/postgres/postgres.git
synced 2025-07-21 16:02:15 +03:00
Fix portability issue in new jsonbsubs code.
On machines where sizeof(Datum) > sizeof(Oid) (that is, any 64-bit platform), the previous coding would compute a misaligned workspace->index pointer if nupper is odd. Architectures where misaligned access is a hard no-no would then fail. This appears to explain why thorntail is unhappy but other buildfarm members are not.
This commit is contained in:
@ -356,7 +356,7 @@ jsonb_subscript_fetch_old(ExprState *state,
|
|||||||
static void
|
static void
|
||||||
jsonb_exec_setup(const SubscriptingRef *sbsref,
|
jsonb_exec_setup(const SubscriptingRef *sbsref,
|
||||||
SubscriptingRefState *sbsrefstate,
|
SubscriptingRefState *sbsrefstate,
|
||||||
SubscriptExecSteps * methods)
|
SubscriptExecSteps *methods)
|
||||||
{
|
{
|
||||||
JsonbSubWorkspace *workspace;
|
JsonbSubWorkspace *workspace;
|
||||||
ListCell *lc;
|
ListCell *lc;
|
||||||
@ -368,9 +368,14 @@ jsonb_exec_setup(const SubscriptingRef *sbsref,
|
|||||||
nupper * (sizeof(Datum) + sizeof(Oid)));
|
nupper * (sizeof(Datum) + sizeof(Oid)));
|
||||||
workspace->expectArray = false;
|
workspace->expectArray = false;
|
||||||
ptr = ((char *) workspace) + MAXALIGN(sizeof(JsonbSubWorkspace));
|
ptr = ((char *) workspace) + MAXALIGN(sizeof(JsonbSubWorkspace));
|
||||||
workspace->indexOid = (Oid *) ptr;
|
|
||||||
ptr += nupper * sizeof(Oid);
|
/*
|
||||||
|
* This coding assumes sizeof(Datum) >= sizeof(Oid), else we might
|
||||||
|
* misalign the indexOid pointer
|
||||||
|
*/
|
||||||
workspace->index = (Datum *) ptr;
|
workspace->index = (Datum *) ptr;
|
||||||
|
ptr += nupper * sizeof(Datum);
|
||||||
|
workspace->indexOid = (Oid *) ptr;
|
||||||
|
|
||||||
sbsrefstate->workspace = workspace;
|
sbsrefstate->workspace = workspace;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user