diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2021-06-08 11:59:34 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2021-06-08 11:59:34 -0400 |
commit | bfeede9fa464ab707eb5ac5704742bf78bd7ac9e (patch) | |
tree | 798ad3820075befedd16ca0b6725fcb06e2f9de4 | |
parent | 37e1cce4ddf0be362e3093cee55493aee41bc423 (diff) | |
download | postgresql-bfeede9fa464ab707eb5ac5704742bf78bd7ac9e.tar.gz postgresql-bfeede9fa464ab707eb5ac5704742bf78bd7ac9e.zip |
Don't crash on empty statements in SQL-standard function bodies.
gram.y should discard NULL pointers (empty statements) when
assembling a routine_body_stmt_list, as it does for other
sorts of statement lists.
Julien Rouhaud and Tom Lane, per report from Noah Misch.
Discussion: https://postgr.es/m/20210606044418.GA297923@rfd.leadboat.com
-rw-r--r-- | src/backend/parser/gram.y | 6 | ||||
-rw-r--r-- | src/test/regress/expected/create_function_3.out | 2 | ||||
-rw-r--r-- | src/test/regress/sql/create_function_3.sql | 2 |
3 files changed, 7 insertions, 3 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 9ee90e3f13a..52a254928f8 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -7990,7 +7990,11 @@ opt_routine_body: routine_body_stmt_list: routine_body_stmt_list routine_body_stmt ';' { - $$ = lappend($1, $2); + /* As in stmtmulti, discard empty statements */ + if ($2 != NULL) + $$ = lappend($1, $2); + else + $$ = $1; } | /*EMPTY*/ { diff --git a/src/test/regress/expected/create_function_3.out b/src/test/regress/expected/create_function_3.out index 5b6bc5eddbe..5955859bb57 100644 --- a/src/test/regress/expected/create_function_3.out +++ b/src/test/regress/expected/create_function_3.out @@ -267,7 +267,7 @@ CREATE FUNCTION functest_S_3() RETURNS boolean RETURN false; CREATE FUNCTION functest_S_3a() RETURNS boolean BEGIN ATOMIC - RETURN false; + ;;RETURN false;; END; CREATE FUNCTION functest_S_10(a text, b date) RETURNS boolean LANGUAGE SQL diff --git a/src/test/regress/sql/create_function_3.sql b/src/test/regress/sql/create_function_3.sql index 4b778999ed7..6e8b838ff2d 100644 --- a/src/test/regress/sql/create_function_3.sql +++ b/src/test/regress/sql/create_function_3.sql @@ -165,7 +165,7 @@ CREATE FUNCTION functest_S_3() RETURNS boolean RETURN false; CREATE FUNCTION functest_S_3a() RETURNS boolean BEGIN ATOMIC - RETURN false; + ;;RETURN false;; END; CREATE FUNCTION functest_S_10(a text, b date) RETURNS boolean |