TitleParser: In formatTitle(), don't throw exceptions on bad namespaces

This ocassionally happens for whatever reason, but it doesn't really
make sense to throw an exception when creating a broken-looking link
would also work. We already do this for TitleParser::getPrefixedDBkey(),
and this also matches the behavior of Title::getNsText().

Bug: T136352
Bug: T136356
Change-Id: Ic7eb17f8917f7fbb28b11d94b742dac1fe5582a1
This commit is contained in:
Kunal Mehta 2016-05-26 13:29:02 -07:00
parent 6a4057d389
commit a22ab0eab0
2 changed files with 10 additions and 3 deletions

View file

@ -105,10 +105,16 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
*/
public function formatTitle( $namespace, $text, $fragment = '', $interwiki = '' ) {
if ( $namespace !== false ) {
$namespace = $this->getNamespaceName( $namespace, $text );
// Try to get a namespace name, but fallback
// to empty string if it doesn't exist
try {
$nsName = $this->getNamespaceName( $namespace, $text );
} catch ( InvalidArgumentException $e ) {
$nsName = '';
}
if ( $namespace !== '' ) {
$text = $namespace . ':' . $text;
if ( $namespace !== 0 ) {
$text = $nsName . ':' . $text;
}
}

View file

@ -164,6 +164,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
// getGenderCache() provides a mock that considers first
// names ending in "a" to be female.
[ NS_USER, 'Lisa_Müller', '', 'de', 'Benutzerin:Lisa Müller' ],
[ 1000000, 'Invalid_namespace', '', 'en', ':Invalid namespace' ],
];
}