mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
caa19f80d4c603c51a0eeb10261951e009fe7a13
FetchStatementTargetList() dereferenced the portal named by a FetchStmt without checking that it still exists. With the extended query protocol, a client can sent a Parse "FETCH n FROM c" while cursor "c" is open (which caches a result's TupleDesc), issue a CLOSE on cursor "c", and then Describe the prepared statement or a portal bound to it. Describe would re-resolve the target list through the named cursor, and crash. In a non-assert builds, this causes a NULL pointer dereference. An assertion was triggered in assert builds slightly before the pointer dereference. This commit changes the describe of a FetchStmt to match with the ExecuteStmt case: if the named cursor's portal is invalid, fail rather than assume that the portal should always exist. A test case is added to libpq_pipeline, backpatchable all the way down. Author: Dirkjan Bussink <d.bussink@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/7DE248EB-7509-4F8A-9F37-4694A40BBAB7@gmail.com Backpatch-through: 14
PostgreSQL Database Management System ===================================== This directory contains the source code distribution of the PostgreSQL database management system. PostgreSQL is an advanced object-relational database management system that supports an extended subset of the SQL standard, including transactions, foreign keys, subqueries, triggers, user-defined types and functions. This distribution also contains C language bindings. PostgreSQL has many language interfaces, many of which are listed here: https://www.postgresql.org/download/ See the file INSTALL for instructions on how to build and install PostgreSQL. That file also lists supported operating systems and hardware platforms and contains information regarding any other software packages that are required to build or run the PostgreSQL system. Copyright and license information can be found in the file COPYRIGHT. A comprehensive documentation set is included in this distribution; it can be read as described in the installation instructions. The latest version of this software may be obtained at https://www.postgresql.org/download/. For more information look at our web site located at https://www.postgresql.org/.
Languages
C
83.9%
PLpgSQL
6.2%
Perl
5.4%
Yacc
1.2%
Meson
0.7%
Other
2.4%