Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7e30c00

Browse files
committed
Free reference in correct Perl context. Backpatch to release 8.2. Patch from Tim Bunce.
1 parent14d5a47 commit7e30c00

File tree

3 files changed

+70
-2
lines changed

3 files changed

+70
-2
lines changed

‎src/pl/plperl/expected/plperl_plperlu.out

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,49 @@ CONTEXT: PL/Perl function "bar"
1717
SELECT * FROM foo(); -- used to cause backend crash (after switching to plperlu)
1818
ERROR: syntax error at or near "invalid" at line 4. at line 2.
1919
CONTEXT: PL/Perl function "foo"
20+
-- test redefinition of specific SP switching languages
21+
-- http://archives.postgresql.org/pgsql-bugs/2010-01/msg00116.php
22+
-- plperl first
23+
create or replace function foo(text) returns text language plperl as 'shift';
24+
select foo('hey');
25+
foo
26+
-----
27+
hey
28+
(1 row)
29+
30+
create or replace function foo(text) returns text language plperlu as 'shift';
31+
select foo('hey');
32+
foo
33+
-----
34+
hey
35+
(1 row)
36+
37+
create or replace function foo(text) returns text language plperl as 'shift';
38+
select foo('hey');
39+
foo
40+
-----
41+
hey
42+
(1 row)
43+
44+
-- plperlu first
45+
create or replace function bar(text) returns text language plperlu as 'shift';
46+
select bar('hey');
47+
bar
48+
-----
49+
hey
50+
(1 row)
51+
52+
create or replace function bar(text) returns text language plperl as 'shift';
53+
select bar('hey');
54+
bar
55+
-----
56+
hey
57+
(1 row)
58+
59+
create or replace function bar(text) returns text language plperlu as 'shift';
60+
select bar('hey');
61+
bar
62+
-----
63+
hey
64+
(1 row)
65+

‎src/pl/plperl/plperl.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**********************************************************************
22
* plperl.c - perl as a procedural language for PostgreSQL
33
*
4-
* $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.163 2010/01/30 01:46:57 adunstan Exp $
4+
* $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.164 2010/02/12 04:31:14 adunstan Exp $
55
*
66
**********************************************************************/
77

@@ -1762,8 +1762,11 @@ compile_plperl_function(Oid fn_oid, bool is_trigger)
17621762
{
17631763
hash_search(plperl_proc_hash,internal_proname,
17641764
HASH_REMOVE,NULL);
1765-
if (prodesc->reference)
1765+
if (prodesc->reference) {
1766+
select_perl_context(prodesc->lanpltrusted);
17661767
SvREFCNT_dec(prodesc->reference);
1768+
restore_context(oldcontext);
1769+
}
17671770
free(prodesc->proname);
17681771
free(prodesc);
17691772
prodesc=NULL;

‎src/pl/plperl/sql/plperl_plperlu.sql

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,22 @@ $$ LANGUAGE plperlu; -- compile plperlu code
1616
SELECT*FROM bar();-- throws exception normally (running plperl)
1717
SELECT*FROM foo();-- used to cause backend crash (after switching to plperlu)
1818

19+
-- test redefinition of specific SP switching languages
20+
-- http://archives.postgresql.org/pgsql-bugs/2010-01/msg00116.php
21+
22+
-- plperl first
23+
create or replacefunctionfoo(text) returnstext language plperlas'shift';
24+
select foo('hey');
25+
create or replacefunctionfoo(text) returnstext language plperluas'shift';
26+
select foo('hey');
27+
create or replacefunctionfoo(text) returnstext language plperlas'shift';
28+
select foo('hey');
29+
30+
-- plperlu first
31+
create or replacefunctionbar(text) returnstext language plperluas'shift';
32+
select bar('hey');
33+
create or replacefunctionbar(text) returnstext language plperlas'shift';
34+
select bar('hey');
35+
create or replacefunctionbar(text) returnstext language plperluas'shift';
36+
select bar('hey');
37+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp