| @@ 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 ) { |
|