File: reentrant.phpt

package info (click to toggle)
php-luasandbox 4.1.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 620 kB
  • sloc: ansic: 3,700; xml: 2,152; php: 64; makefile: 13; sh: 3
file content (56 lines) | stat: -rw-r--r-- 1,127 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
--TEST--
Re-entering Lua during a callback to PHP
--FILE--
<?php
$sandbox = new LuaSandbox;
$chunk = $sandbox->loadString('
	function factorial(n)
		if n <= 1 then
			return 1
		else
			return n * test.factorial(n - 1)
		end
	end

	return factorial
');

$ret = $chunk->call();
$luaFactorial = $ret[0];

$sandbox->registerLibrary( 'test', array( 'factorial' => 'factorial' ) );

function factorial($n) {
	global $luaFactorial;
	if ($n <= 1) {
		return array(1);
	} else {
		$ret = $luaFactorial->call($n - 1);
		return array($n * $ret[0]);
	}
}

print implode('', factorial(10)) . "\n";
var_dump( $luaFactorial->call(10) );

try {
	$luaFactorial->call(1000000000);
} catch ( LuaSandboxError $e ) {
	print $e->getMessage() . "\n";
}
try {
	factorial(1000000000);
} catch ( LuaSandboxError $e ) {
	print $e->getMessage() . "\n";
}

--EXPECTF--
3628800
array(1) {
  [0]=>
  int(3628800)
}
%AWarning: LuaSandboxFunction::call(): Failed to generate Lua trace (C stack overflow) in %s on line %d
C stack overflow
%AWarning: LuaSandboxFunction::call(): Failed to generate Lua trace (C stack overflow) in %s on line %d
C stack overflow