Avoid fetching past the end of the indoption array.
pg_get_indexdef_worker carelessly fetched indoption entries even for non-key index columns that don't have one. 99.999% of the time this would be harmless, since the code wouldn't examine the value ... but some fine day this will be a fetch off the end of memory, resulting in SIGSEGV. Detected through valgrind testing. Odd that the buildfarm's valgrind critters haven't noticed.
This commit is contained in:
parent
10e3991fad
commit
a7ca25cf78
@ -1305,7 +1305,6 @@ pg_get_indexdef_worker(Oid indexrelid, int colno,
|
|||||||
for (keyno = 0; keyno < idxrec->indnatts; keyno++)
|
for (keyno = 0; keyno < idxrec->indnatts; keyno++)
|
||||||
{
|
{
|
||||||
AttrNumber attnum = idxrec->indkey.values[keyno];
|
AttrNumber attnum = idxrec->indkey.values[keyno];
|
||||||
int16 opt = indoption->values[keyno];
|
|
||||||
Oid keycoltype;
|
Oid keycoltype;
|
||||||
Oid keycolcollation;
|
Oid keycolcollation;
|
||||||
|
|
||||||
@ -1367,10 +1366,10 @@ pg_get_indexdef_worker(Oid indexrelid, int colno,
|
|||||||
if (!attrsOnly && keyno < idxrec->indnkeyatts &&
|
if (!attrsOnly && keyno < idxrec->indnkeyatts &&
|
||||||
(!colno || colno == keyno + 1))
|
(!colno || colno == keyno + 1))
|
||||||
{
|
{
|
||||||
Oid indcoll;
|
int16 opt = indoption->values[keyno];
|
||||||
|
Oid indcoll = indcollation->values[keyno];
|
||||||
|
|
||||||
/* Add collation, if not default for column */
|
/* Add collation, if not default for column */
|
||||||
indcoll = indcollation->values[keyno];
|
|
||||||
if (OidIsValid(indcoll) && indcoll != keycolcollation)
|
if (OidIsValid(indcoll) && indcoll != keycolcollation)
|
||||||
appendStringInfo(&buf, " COLLATE %s",
|
appendStringInfo(&buf, " COLLATE %s",
|
||||||
generate_collation_name((indcoll)));
|
generate_collation_name((indcoll)));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user