pgsql: Fix array slicing of int2vector and oidvector values.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix array slicing of int2vector and oidvector values.
Date: 2013-11-24 01:04:41
Message-ID: E1VkO7t-0001g5-KO@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix array slicing of int2vector and oidvector values.

The previous coding labeled expressions such as pg_index.indkey[1:3] as
being of int2vector type; which is not right because the subscript bounds
of such a result don't, in general, satisfy the restrictions of int2vector.
To fix, implicitly promote the result of slicing int2vector to int2[],
or oidvector to oid[]. This is similar to what we've done with domains
over arrays, which is a good analogy because these types are very much
like restricted domains of the corresponding regular-array types.

A side-effect is that we now also forbid array-element updates on such
columns, eg while "update pg_index set indkey[4] = 42" would have worked
before if you were superuser (and corrupted your catalogs irretrievably,
no doubt) it's now disallowed. This seems like a good thing since, again,
some choices of subscripting would've led to results not satisfying the
restrictions of int2vector. The case of an array-slice update was
rejected before, though with a different error message than you get now.
We could make these cases work in future if we added a cast from int2[]
to int2vector (with a cast function checking the subscript restrictions)
but it seems unlikely that there's any value in that.

Per report from Ronan Dunklau. Back-patch to all supported branches
because of the crash risks involved.

Branch
------
REL8_4_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/d0378c8a8c502c7d14b3e4b062988a3f1a0af6ba

Modified Files
--------------
src/backend/parser/parse_node.c | 12 ++++++++++++
src/include/catalog/pg_type.h | 2 ++
2 files changed, 14 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2013-11-24 02:34:59 pgsql: PL/Tcl: Add event trigger support
Previous Message Tom Lane 2013-11-23 23:25:36 pgsql: Ensure _dosmaperr() actually sets errno correctly.