#167112 by evil_marty and deekayen: Add support for 'wildcard' .tpl.php files to act on any numeric pages, such as page-user-%.tpl.php
parent
49699d5be1
commit
a3018c01a2
|
@ -2027,6 +2027,11 @@ function template_page_suggestions($args) {
|
|||
foreach ($args as $arg) {
|
||||
// Remove slashes or null per SA-CORE-2009-003.
|
||||
$arg = str_replace(array("/", "\\", "\0"), '', $arg);
|
||||
// The percent acts as a wildcard for numeric arguments since
|
||||
// asterisks are not valid filename characters on many filesystems.
|
||||
if (is_numeric($arg)) {
|
||||
$suggestions[] = $suggestion . '-%';
|
||||
}
|
||||
$suggestions[] = $suggestion . '-' . $arg;
|
||||
if (!is_numeric($arg)) {
|
||||
$suggestion .= '-' . $arg;
|
||||
|
|
|
@ -27,17 +27,17 @@ class TemplateUnitTest extends DrupalWebTestCase {
|
|||
variable_set('site_frontpage', 'nobody-home');
|
||||
$args = array('node', '1', 'edit');
|
||||
$suggestions = template_page_suggestions($args);
|
||||
$this->assertEqual($suggestions, array('page-node', 'page-node-1', 'page-node-edit'), t('Found expected node edit page template suggestions'));
|
||||
$this->assertEqual($suggestions, array('page-node', 'page-node-%', 'page-node-1', 'page-node-edit'), t('Found expected node edit page template suggestions'));
|
||||
// Check attack vectors.
|
||||
$args = array('node', '\\1');
|
||||
$suggestions = template_page_suggestions($args);
|
||||
$this->assertEqual($suggestions, array('page-node', 'page-node-1'), t('Removed invalid \\ from template suggestions'));
|
||||
$this->assertEqual($suggestions, array('page-node', 'page-node-%', 'page-node-1'), t('Removed invalid \\ from template suggestions'));
|
||||
$args = array('node', '1/');
|
||||
$suggestions = template_page_suggestions($args);
|
||||
$this->assertEqual($suggestions, array('page-node', 'page-node-1'), t('Removed invalid / from template suggestions'));
|
||||
$this->assertEqual($suggestions, array('page-node', 'page-node-%', 'page-node-1'), t('Removed invalid / from template suggestions'));
|
||||
$args = array('node', "1\0");
|
||||
$suggestions = template_page_suggestions($args);
|
||||
$this->assertEqual($suggestions, array('page-node', 'page-node-1'), t('Removed invalid \\0 from template suggestions'));
|
||||
$this->assertEqual($suggestions, array('page-node', 'page-node-%', 'page-node-1'), t('Removed invalid \\0 from template suggestions'));
|
||||
// Tests for drupal_discover_template()
|
||||
$suggestions = array('page');
|
||||
$this->assertEqual(drupal_discover_template(array('themes/garland'), $suggestions), 'themes/garland/page.tpl.php', t('Safe template discovered'));
|
||||
|
|
Loading…
Reference in New Issue