App-EvalServerAdvanced
view release on metacpan or search on metacpan
lib/App/EvalServerAdvanced/JobManager.pm view on Meta::CPAN
my ($code_file) = grep {$_->filename eq '__code'} $eval_obj->{files}->@*;
my $code = $code_file->get_contents;
my $proc_future;
my $proc = IO::Async::Process->new(
code => sub {
close(STDERR);
dup2(1,2) or _exit(212); # Setup the C side of things
# *STDERR = \*STDOUT; # Setup the perl side of things
*STDERR = IO::Handle->new_from_fd(2, "w"); # setup a new STDERR
binmode STDOUT, ":encoding(utf8)"; # these really only affect perl subs, but they should also support other encodings
binmode STDERR, ":encoding(utf8)";
binmode STDIN, ":encoding(utf8)";
$SIG{$_} = sub {_exit(1)} for (keys %SIG);
eval {
App::EvalServerAdvanced::Sandbox::run_eval($code, $eval_obj->{language}, $eval_obj->{files});
};
if ($@) {
print "$@";
}
lib/App/EvalServerAdvanced/Sandbox.pm view on Meta::CPAN
# Get the nobody uid before we chroot, namespace and do other funky stuff.
my $nobody_uid = getpwnam("nobody");
die "Error, can't find a uid for 'nobody'. Replace with someone who exists" unless $nobody_uid;
my $exitcode = $namespace->run(code => sub {
delete $SIG{CHLD};
select(STDERR);
$|++;
select(STDOUT);
$|++;
binmode STDOUT, ":encoding(utf8)"; # Enable utf8 output.
binmode STDERR, ":encoding(utf8)"; # Enable utf8 output.
# This should end up actually reading from the IO::Async::Process stdin filehandle eventually
# but I'm not ready to setup the protocol for that yet.
# redirect STDIN to /dev/null, to avoid warnings in convoluted cases.
close(STDIN);
open STDIN, '<', '/dev/null' or die "Can't open /dev/null: $!";
my $tmpfs_size = config->sandbox->tmpfs_size // "16m"; # / # fix syntax in kate
my $jail_path = $work_path . "/jail";
xt/author/00-compile.t view on Meta::CPAN
for my $lib (@module_files)
{
# see L<perlfaq8/How can I capture STDERR from an external command?>
my $stderr = IO::Handle->new;
diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} }
$^X, @switches, '-e', "require q[$lib]"))
if $ENV{PERL_COMPILE_TEST_DEBUG};
my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]");
binmode $stderr, ':crlf' if $^O eq 'MSWin32';
my @_warnings = <$stderr>;
waitpid($pid, 0);
is($?, 0, "$lib loaded ok");
shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/
and not eval { +require blib; blib->VERSION('1.01') };
if (@_warnings)
{
warn @_warnings;
xt/author/00-compile.t view on Meta::CPAN
close $fh and skip("$file uses -T; not testable with PERL5LIB", 1)
if grep { $_ eq '-T' } @switches and $ENV{PERL5LIB};
my $stderr = IO::Handle->new;
diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} }
$^X, @switches, '-c', $file))
if $ENV{PERL_COMPILE_TEST_DEBUG};
my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-c', $file);
binmode $stderr, ':crlf' if $^O eq 'MSWin32';
my @_warnings = <$stderr>;
waitpid($pid, 0);
is($?, 0, "$file compiled ok");
shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/
and not eval { +require blib; blib->VERSION('1.01') };
# in older perls, -c output is simply the file portion of the path being tested
if (@_warnings = grep { !/\bsyntax OK$/ }
grep { chomp; $_ ne (File::Spec->splitpath($file))[2] } @_warnings)
( run in 1.259 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )