aboutsummaryrefslogtreecommitdiff
path: root/src/pl/plperl/expected/plperlu_plperl.out
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl/plperl/expected/plperlu_plperl.out')
-rw-r--r--src/pl/plperl/expected/plperlu_plperl.out76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/pl/plperl/expected/plperlu_plperl.out b/src/pl/plperl/expected/plperlu_plperl.out
new file mode 100644
index 00000000000..198dbf432d3
--- /dev/null
+++ b/src/pl/plperl/expected/plperlu_plperl.out
@@ -0,0 +1,76 @@
+--
+-- Test that recursing between plperl and plperlu doesn't allow plperl to perform unsafe ops
+--
+-- recurse between a plperl and plperlu function that are identical except that
+-- each calls the other. Each also checks if an unsafe opcode can be executed.
+CREATE OR REPLACE FUNCTION recurse_plperl(i int) RETURNS SETOF TEXT LANGUAGE plperl
+AS $$
+ my $i = shift;
+ return unless $i > 0;
+ return_next "plperl $i entry: ".((eval "stat;1") ? "ok" : $@);
+ return_next $_
+ for map { $_->{recurse_plperlu} }
+ @{spi_exec_query("select * from recurse_plperlu($i-1)")->{rows}};
+ return;
+$$;
+CREATE OR REPLACE FUNCTION recurse_plperlu(i int) RETURNS SETOF TEXT LANGUAGE plperlu
+AS $$
+ my $i = shift;
+ return unless $i > 0;
+ return_next "plperlu $i entry: ".((eval "stat;1") ? "ok" : $@);
+ return_next $_
+ for map { $_->{recurse_plperl} }
+ @{spi_exec_query("select * from recurse_plperl($i-1)")->{rows}};
+ return;
+$$;
+SELECT * FROM recurse_plperl(5);
+ recurse_plperl
+--------------------------------------------------------------
+ plperl 5 entry: 'stat' trapped by operation mask at line 1.
+
+ plperlu 4 entry: ok
+ plperl 3 entry: 'stat' trapped by operation mask at line 1.
+
+ plperlu 2 entry: ok
+ plperl 1 entry: 'stat' trapped by operation mask at line 1.
+
+(5 rows)
+
+SELECT * FROM recurse_plperlu(5);
+ recurse_plperlu
+--------------------------------------------------------------
+ plperlu 5 entry: ok
+ plperl 4 entry: 'stat' trapped by operation mask at line 1.
+
+ plperlu 3 entry: ok
+ plperl 2 entry: 'stat' trapped by operation mask at line 1.
+
+ plperlu 1 entry: ok
+(5 rows)
+
+--
+-- Make sure we can't use/require things in plperl
+--
+CREATE OR REPLACE FUNCTION use_plperlu() RETURNS void LANGUAGE plperlu
+AS $$
+use Errno;
+$$;
+CREATE OR REPLACE FUNCTION use_plperl() RETURNS void LANGUAGE plperl
+AS $$
+use Errno;
+$$;
+ERROR: creation of Perl function failed: Unable to load Errno.pm into plperl at line 2.
+BEGIN failed--compilation aborted at line 2.
+-- make sure our overloaded require op gets restored/set correctly
+select use_plperlu();
+ use_plperlu
+-------------
+
+(1 row)
+
+CREATE OR REPLACE FUNCTION use_plperl() RETURNS void LANGUAGE plperl
+AS $$
+use Errno;
+$$;
+ERROR: creation of Perl function failed: Unable to load Errno.pm into plperl at line 2.
+BEGIN failed--compilation aborted at line 2.