Skip to content

Commit c110eff

Browse files
committed
Use FLEXIBLE_ARRAY_MEMBER in struct RecordIOData.
I (tgl) fixed this last night in rowtypes.c, but I missed that the code had been copied into a couple of other places. Michael Paquier
1 parent e38b1eb commit c110eff

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

contrib/hstore/hstore_io.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@ typedef struct RecordIOData
747747
Oid record_type;
748748
int32 record_typmod;
749749
int ncolumns;
750-
ColumnIOData columns[1]; /* VARIABLE LENGTH ARRAY */
750+
ColumnIOData columns[FLEXIBLE_ARRAY_MEMBER];
751751
} RecordIOData;
752752

753753
PG_FUNCTION_INFO_V1(hstore_from_record);
@@ -805,8 +805,8 @@ hstore_from_record(PG_FUNCTION_ARGS)
805805
{
806806
fcinfo->flinfo->fn_extra =
807807
MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
808-
sizeof(RecordIOData) - sizeof(ColumnIOData)
809-
+ ncolumns * sizeof(ColumnIOData));
808+
offsetof(RecordIOData, columns) +
809+
ncolumns * sizeof(ColumnIOData));
810810
my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra;
811811
my_extra->record_type = InvalidOid;
812812
my_extra->record_typmod = 0;
@@ -816,8 +816,8 @@ hstore_from_record(PG_FUNCTION_ARGS)
816816
my_extra->record_typmod != tupTypmod)
817817
{
818818
MemSet(my_extra, 0,
819-
sizeof(RecordIOData) - sizeof(ColumnIOData)
820-
+ ncolumns * sizeof(ColumnIOData));
819+
offsetof(RecordIOData, columns) +
820+
ncolumns * sizeof(ColumnIOData));
821821
my_extra->record_type = tupType;
822822
my_extra->record_typmod = tupTypmod;
823823
my_extra->ncolumns = ncolumns;
@@ -990,8 +990,8 @@ hstore_populate_record(PG_FUNCTION_ARGS)
990990
{
991991
fcinfo->flinfo->fn_extra =
992992
MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
993-
sizeof(RecordIOData) - sizeof(ColumnIOData)
994-
+ ncolumns * sizeof(ColumnIOData));
993+
offsetof(RecordIOData, columns) +
994+
ncolumns * sizeof(ColumnIOData));
995995
my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra;
996996
my_extra->record_type = InvalidOid;
997997
my_extra->record_typmod = 0;
@@ -1001,8 +1001,8 @@ hstore_populate_record(PG_FUNCTION_ARGS)
10011001
my_extra->record_typmod != tupTypmod)
10021002
{
10031003
MemSet(my_extra, 0,
1004-
sizeof(RecordIOData) - sizeof(ColumnIOData)
1005-
+ ncolumns * sizeof(ColumnIOData));
1004+
offsetof(RecordIOData, columns) +
1005+
ncolumns * sizeof(ColumnIOData));
10061006
my_extra->record_type = tupType;
10071007
my_extra->record_typmod = tupTypmod;
10081008
my_extra->ncolumns = ncolumns;

src/backend/utils/adt/jsonfuncs.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ typedef struct RecordIOData
216216
Oid record_type;
217217
int32 record_typmod;
218218
int ncolumns;
219-
ColumnIOData columns[1]; /* VARIABLE LENGTH ARRAY */
219+
ColumnIOData columns[FLEXIBLE_ARRAY_MEMBER];
220220
} RecordIOData;
221221

222222
/* state for populate_recordset */
@@ -2148,8 +2148,8 @@ populate_record_worker(FunctionCallInfo fcinfo, const char *funcname,
21482148
{
21492149
fcinfo->flinfo->fn_extra =
21502150
MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
2151-
sizeof(RecordIOData) - sizeof(ColumnIOData)
2152-
+ ncolumns * sizeof(ColumnIOData));
2151+
offsetof(RecordIOData, columns) +
2152+
ncolumns * sizeof(ColumnIOData));
21532153
my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra;
21542154
my_extra->record_type = InvalidOid;
21552155
my_extra->record_typmod = 0;
@@ -2161,8 +2161,8 @@ populate_record_worker(FunctionCallInfo fcinfo, const char *funcname,
21612161
my_extra->record_typmod != tupTypmod))
21622162
{
21632163
MemSet(my_extra, 0,
2164-
sizeof(RecordIOData) - sizeof(ColumnIOData)
2165-
+ ncolumns * sizeof(ColumnIOData));
2164+
offsetof(RecordIOData, columns) +
2165+
ncolumns * sizeof(ColumnIOData));
21662166
my_extra->record_type = tupType;
21672167
my_extra->record_typmod = tupTypmod;
21682168
my_extra->ncolumns = ncolumns;
@@ -2653,8 +2653,8 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname,
26532653
{
26542654
fcinfo->flinfo->fn_extra =
26552655
MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
2656-
sizeof(RecordIOData) - sizeof(ColumnIOData)
2657-
+ ncolumns * sizeof(ColumnIOData));
2656+
offsetof(RecordIOData, columns) +
2657+
ncolumns * sizeof(ColumnIOData));
26582658
my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra;
26592659
my_extra->record_type = InvalidOid;
26602660
my_extra->record_typmod = 0;
@@ -2664,8 +2664,8 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname,
26642664
my_extra->record_typmod != tupTypmod)
26652665
{
26662666
MemSet(my_extra, 0,
2667-
sizeof(RecordIOData) - sizeof(ColumnIOData)
2668-
+ ncolumns * sizeof(ColumnIOData));
2667+
offsetof(RecordIOData, columns) +
2668+
ncolumns * sizeof(ColumnIOData));
26692669
my_extra->record_type = tupType;
26702670
my_extra->record_typmod = tupTypmod;
26712671
my_extra->ncolumns = ncolumns;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy