Viewing File: /opt/alt/tests/alt-php80-pecl-luasandbox_4.1.2-2.el8/tests/xpcall.phpt

--TEST--
xpcall() basic behaviour
--FILE--
<?php

$lua = <<<LUA
	function xpcall_test(f, err)
		local status, msg
		status, msg = xpcall(f, err)
		if not status then
			return msg
		else
			return "success"
		end
	end
LUA;

$xperr = 'return "xp: " .. msg';

$tests = array(
	'Normal' => array(
		'return 1',
		$xperr
	),
	'User error' => array(
		'error("runtime error")',
		$xperr
	),
	'Error in error handler' => array(
		'error("original error")',
		'error("error in handler")'
	),
	'Unconvertible error in error handler' => array(
		'error("original error")',
		'error({})'
	),
	'Numeric error in error handler' => array(
		'error("original error")',
		'error(2)',
	),
	'Argument check error' => array(
		'string.byte()',
		$xperr
	),
	'Protected infinite recursion' => array(
		'function foo() foo() end foo()',
		$xperr
	),
	'Infinite recursion in handler' => array(
		'error("x")',
		'function foo() foo() end foo()'
	),
	'Protected infinite loop' => array(
		'while true do end',
		$xperr,
	),
	'Infinite loop in handler' => array(
		'error("x")',
		'while true do end',
	),
	'Out of memory in handler' => array(
		'error("x")',
		'string.rep("x", 1000000)'
	),
);

$sandbox = new LuaSandbox;
$sandbox->loadString( $lua )->call();
$sandbox->setCPULimit( 0.25 );
$sandbox->setMemoryLimit( 100000 );

foreach ( $tests as $desc => $info ) {
	$sandbox = new LuaSandbox;
	$sandbox->loadString( $lua )->call();
	$sandbox->setCPULimit( 0.25 );
	$sandbox->setMemoryLimit( 100000 );
	echo "$desc: ";
	list( $code, $errorCode ) = $info;
	$func = $sandbox->loadString( $code );
	$errorCode = "return function(msg) $errorCode end";
	$ret = $sandbox->loadString( $errorCode )->call();
	$errorFunc = $ret[0];

	try {
		print implode("\n",
			$sandbox->callFunction( 'xpcall_test', $func, $errorFunc ) ) . "\n";
	} catch ( LuaSandboxError $e ) {
		echo "LuaSandboxError: " . $e->getMessage() . "\n";
	}
}

--EXPECT--
Normal: success
User error: xp: [string ""]:1: runtime error
Error in error handler: LuaSandboxError: [string ""]:1: error in handler
Unconvertible error in error handler: LuaSandboxError: unknown error
Numeric error in error handler: LuaSandboxError: [string ""]:1: 2
Argument check error: xp: [string ""]:1: bad argument #1 to 'byte' (string expected, got no value)
Protected infinite recursion: LuaSandboxError: not enough memory
Infinite recursion in handler: LuaSandboxError: not enough memory
Protected infinite loop: LuaSandboxError: The maximum execution time for this script was exceeded
Infinite loop in handler: LuaSandboxError: The maximum execution time for this script was exceeded
Out of memory in handler: LuaSandboxError: not enough memory
Back to Directory File Manager
<