mirror of
https://github.com/postgres/postgres.git
synced 2025-07-23 03:21:12 +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:
@ -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