diff options
Diffstat (limited to 'src/backend/access')
-rw-r--r-- | src/backend/access/common/tupdesc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index 72a2c3d3db6..7c5c390503b 100644 --- a/src/backend/access/common/tupdesc.c +++ b/src/backend/access/common/tupdesc.c @@ -597,6 +597,8 @@ TupleDescInitEntry(TupleDesc desc, Assert(PointerIsValid(desc)); Assert(attributeNumber >= 1); Assert(attributeNumber <= desc->natts); + Assert(attdim >= 0); + Assert(attdim <= PG_INT16_MAX); /* * initialize the attribute fields @@ -667,6 +669,8 @@ TupleDescInitBuiltinEntry(TupleDesc desc, Assert(PointerIsValid(desc)); Assert(attributeNumber >= 1); Assert(attributeNumber <= desc->natts); + Assert(attdim >= 0); + Assert(attdim <= PG_INT16_MAX); /* initialize the attribute fields */ att = TupleDescAttr(desc, attributeNumber - 1); @@ -827,6 +831,10 @@ BuildDescForRelation(List *schema) attcollation = GetColumnDefCollation(NULL, entry, atttypid); attdim = list_length(entry->typeName->arrayBounds); + if (attdim > PG_INT16_MAX) + ereport(ERROR, + errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("too many array dimensions")); if (entry->typeName->setof) ereport(ERROR, |