Add checks for valid encoding of query strings passed to SPI by plperl.
authorAndrew Dunstan
Tue, 9 Mar 2010 02:48:33 +0000 (02:48 +0000)
committerAndrew Dunstan
Tue, 9 Mar 2010 02:48:33 +0000 (02:48 +0000)
src/pl/plperl/plperl.c

index 449b283462e51ea72b187e95da83ca888528cafb..08e88838c8a4cf99e96d372eb44fa7dc6f2f92f7 100644 (file)
@@ -1,7 +1,7 @@
 /**********************************************************************
  * 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;
 
+       pg_verifymbstr(query, strlen(query), false);
+
        spi_rv = SPI_execute(query, current_call_data->prodesc->fn_readonly,
                             limit);
        ret_hv = plperl_spi_execute_fetch_result(SPI_tuptable, SPI_processed,
@@ -2343,6 +2345,9 @@ plperl_spi_query(char *query)
        void       *plan;
        Portal      portal;
 
+       /* Make sure the query is validly encoded */
+       pg_verifymbstr(query, strlen(query), false);
+
        /* Create a cursor for the query */
        plan = SPI_prepare(query, 0, NULL);
        if (plan == NULL)
@@ -2549,6 +2554,9 @@ plperl_spi_prepare(char *query, int argc, SV **argv)
            qdesc->argtypioparams[i] = typIOParam;
        }
 
+       /* Make sure the query is validly encoded */
+       pg_verifymbstr(query, strlen(query), false);
+
        /************************************************************
         * Prepare the plan and check for errors
         ************************************************************/