Add checks for valid encoding of query strings passed to SPI by plperl.

This commit is contained in:
Andrew Dunstan 2010-03-09 02:48:33 +00:00
parent b989662bf1
commit 6fcd5010e2

View File

@ -1,7 +1,7 @@
/********************************************************************** /**********************************************************************
* plperl.c - perl as a procedural language for PostgreSQL * plperl.c - perl as a procedural language for PostgreSQL
* *
* $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.169 2010/02/26 02:01:33 momjian Exp $ * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.170 2010/03/09 02:48:33 adunstan Exp $
* *
**********************************************************************/ **********************************************************************/
@ -2102,6 +2102,8 @@ plperl_spi_exec(char *query, int limit)
{ {
int spi_rv; int spi_rv;
pg_verifymbstr(query, strlen(query), false);
spi_rv = SPI_execute(query, current_call_data->prodesc->fn_readonly, spi_rv = SPI_execute(query, current_call_data->prodesc->fn_readonly,
limit); limit);
ret_hv = plperl_spi_execute_fetch_result(SPI_tuptable, SPI_processed, ret_hv = plperl_spi_execute_fetch_result(SPI_tuptable, SPI_processed,
@ -2343,6 +2345,9 @@ plperl_spi_query(char *query)
void *plan; void *plan;
Portal portal; Portal portal;
/* Make sure the query is validly encoded */
pg_verifymbstr(query, strlen(query), false);
/* Create a cursor for the query */ /* Create a cursor for the query */
plan = SPI_prepare(query, 0, NULL); plan = SPI_prepare(query, 0, NULL);
if (plan == NULL) if (plan == NULL)
@ -2549,6 +2554,9 @@ plperl_spi_prepare(char *query, int argc, SV **argv)
qdesc->argtypioparams[i] = typIOParam; qdesc->argtypioparams[i] = typIOParam;
} }
/* Make sure the query is validly encoded */
pg_verifymbstr(query, strlen(query), false);
/************************************************************ /************************************************************
* Prepare the plan and check for errors * Prepare the plan and check for errors
************************************************************/ ************************************************************/