Viewing File: /opt/alt/tests/alt-php80-pecl-luasandbox_4.1.2-2.el8/tests/pcall.phpt
--TEST--
pcall() catching various errors
--FILE--
<?php
$lua = <<<LUA
function pcall_test(f)
local status, msg
status, msg = pcall(f)
if not status then
return "Caught: " .. msg
else
return "success"
end
end
LUA;
$tests = array(
'Normal' => 'return 1',
'User error' => 'error("runtime error")',
'Argument check error' => 'string.byte()',
'Infinite recursion' => 'function foo() foo() end foo()',
'Infinite loop (timeout)' => 'while true do end',
'Out of memory' => 'string.rep("x", 1000000)'
);
foreach ( $tests as $desc => $code ) {
echo "$desc: ";
$sandbox = new LuaSandbox;
$sandbox->loadString( $lua )->call();
$sandbox->setCPULimit( 0.25 );
$sandbox->setMemoryLimit( 100000 );
try {
print implode("\n",
$sandbox->callFunction( 'pcall_test', $sandbox->loadString( $code ) ) ) . "\n";
} catch ( LuaSandboxError $e ) {
echo "LuaSandboxError: " . $e->getMessage() . "\n";
}
}
--EXPECT--
Normal: success
User error: Caught: [string ""]:1: runtime error
Argument check error: Caught: [string ""]:1: bad argument #1 to 'byte' (string expected, got no value)
Infinite recursion: LuaSandboxError: not enough memory
Infinite loop (timeout): LuaSandboxError: The maximum execution time for this script was exceeded
Out of memory: LuaSandboxError: not enough memory
Back to Directory
File Manager
<