@@ 56-69 (lines=14) @@ | ||
53 | */ |
|
54 | protected function getTemplateFilename( $templateName ) { |
|
55 | // Prevent upwards directory traversal using same methods as Title::secureAndSplit |
|
56 | if ( |
|
57 | strpos( $templateName, '.' ) !== false && |
|
58 | ( |
|
59 | $templateName === '.' || $templateName === '..' || |
|
60 | strpos( $templateName, './' ) === 0 || |
|
61 | strpos( $templateName, '../' ) === 0 || |
|
62 | strpos( $templateName, '/./' ) !== false || |
|
63 | strpos( $templateName, '/../' ) !== false || |
|
64 | substr( $templateName, -2 ) === '/.' || |
|
65 | substr( $templateName, -3 ) === '/..' |
|
66 | ) |
|
67 | ) { |
|
68 | throw new UnexpectedValueException( "Malformed \$templateName: $templateName" ); |
|
69 | } |
|
70 | ||
71 | return "{$this->templateDir}/{$templateName}.mustache"; |
|
72 | } |
@@ 389-402 (lines=14) @@ | ||
386 | # Pages with "/./" or "/../" appearing in the URLs will often be un- |
|
387 | # reachable due to the way web browsers deal with 'relative' URLs. |
|
388 | # Also, they conflict with subpage syntax. Forbid them explicitly. |
|
389 | if ( |
|
390 | strpos( $dbkey, '.' ) !== false && |
|
391 | ( |
|
392 | $dbkey === '.' || $dbkey === '..' || |
|
393 | strpos( $dbkey, './' ) === 0 || |
|
394 | strpos( $dbkey, '../' ) === 0 || |
|
395 | strpos( $dbkey, '/./' ) !== false || |
|
396 | strpos( $dbkey, '/../' ) !== false || |
|
397 | substr( $dbkey, -2 ) == '/.' || |
|
398 | substr( $dbkey, -3 ) == '/..' |
|
399 | ) |
|
400 | ) { |
|
401 | throw new MalformedTitleException( 'title-invalid-relative', $text ); |
|
402 | } |
|
403 | ||
404 | # Magic tilde sequences? Nu-uh! |
|
405 | if ( strpos( $dbkey, '~~~' ) !== false ) { |