php-src/ext/xsl/tests/maxTemplateDepth_modification_validation_bypass.phpt
Niels Dossche 30885f3b5f
Implement request #71571: XSLT processor should provide option to change maxDepth (#13731)
There are two depth limiting parameters for XSLT templates.
1) maxTemplateDepth
   This corresponds to the recursion depth of a template. For very
   complicated templates this can be hit.
2) maxTemplateVars
   This is the total number of live variables. When using recursive
   templates with lots of parameters you can hit this limit.

This patch introduces two new properties to XSLTProcessor that
corresponds to the above variables.
2024-03-31 21:21:23 +02:00

57 lines
1.1 KiB
PHP

--TEST--
XSLTProcessor::$maxTemplateDepth modification validation bypass
--EXTENSIONS--
xsl
--FILE--
<?php
$proc = new XSLTProcessor();
foreach ([1,-1] as $value) {
echo "--- Set to $value ---\n";
try {
$proc->maxTemplateDepth = $value;
} catch (ValueError $e) {
echo $e->getMessage(), "\n";
}
}
echo "--- Get reference ---\n";
try {
$ref =& $proc->maxTemplateDepth;
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
echo "--- Unset ---\n";
try {
unset($proc->maxTemplateDepth);
} catch (Error $e) {
echo $e->getMessage(), "\n";
}
echo "--- Dump ---\n";
var_dump($proc);
?>
--EXPECT--
--- Set to 1 ---
--- Set to -1 ---
XSLTProcessor::$maxTemplateDepth must be greater than or equal to 0
--- Get reference ---
Indirect modification of XSLTProcessor::$maxTemplateDepth is not allowed
--- Unset ---
Cannot unset XSLTProcessor::$maxTemplateDepth
--- Dump ---
object(XSLTProcessor)#1 (4) {
["doXInclude"]=>
bool(false)
["cloneDocument"]=>
bool(false)
["maxTemplateDepth"]=>
int(1)
["maxTemplateVars"]=>
int(15000)
}