diff options
| author | Noah Misch | 2015-02-26 04:48:28 +0000 |
|---|---|---|
| committer | Noah Misch | 2015-02-26 04:49:45 +0000 |
| commit | 40a9a16760ab803694583d7f3549a7ad7bc11d75 (patch) | |
| tree | 810a8829339b3185b18caf191f7390e6d5075325 /src/test | |
| parent | 7a501bcbfc64d9e66fa6e83ed57b1804203da3e3 (diff) | |
Free SQLSTATE and SQLERRM no earlier than other PL/pgSQL variables.
"RETURN SQLERRM" prompted plpgsql_exec_function() to read from freed
memory. Back-patch to 9.0 (all supported versions). Little code ran
between the premature free and the read, so non-assert builds are
unlikely to witness user-visible consequences.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/plpgsql.out | 12 | ||||
| -rw-r--r-- | src/test/regress/sql/plpgsql.sql | 10 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/test/regress/expected/plpgsql.out b/src/test/regress/expected/plpgsql.out index 4e0f0823017..74707ebbe39 100644 --- a/src/test/regress/expected/plpgsql.out +++ b/src/test/regress/expected/plpgsql.out @@ -2469,9 +2469,21 @@ NOTICE: P0001 user exception (1 row) +create function excpt_test4() returns text as $$ +begin + begin perform 1/0; + exception when others then return sqlerrm; end; +end; $$ language plpgsql; +select excpt_test4(); + excpt_test4 +------------------ + division by zero +(1 row) + drop function excpt_test1(); drop function excpt_test2(); drop function excpt_test3(); +drop function excpt_test4(); -- parameters of raise stmt can be expressions create function raise_exprs() returns void as $$ declare diff --git a/src/test/regress/sql/plpgsql.sql b/src/test/regress/sql/plpgsql.sql index 0de60d7073c..f918a76b9db 100644 --- a/src/test/regress/sql/plpgsql.sql +++ b/src/test/regress/sql/plpgsql.sql @@ -2093,11 +2093,19 @@ begin raise notice '% %', sqlstate, sqlerrm; end; end; $$ language plpgsql; - select excpt_test3(); + +create function excpt_test4() returns text as $$ +begin + begin perform 1/0; + exception when others then return sqlerrm; end; +end; $$ language plpgsql; +select excpt_test4(); + drop function excpt_test1(); drop function excpt_test2(); drop function excpt_test3(); +drop function excpt_test4(); -- parameters of raise stmt can be expressions create function raise_exprs() returns void as $$ |
