/** @var Title $newTitle */
foreach ( $titles as $id => $newTitle ) {
- $titles[ $id - 1 ] = $titles[ $id - 1 ] ?? $oldTitle;
+ $titles[$id - 1] = $titles[$id - 1] ?? $oldTitle;
$redirValues[] = [
'from' => $titles[$id - 1]->getPrefixedText(),
];
$titleObj = $newTitle;
+
+ // T239428: Check whether the new title is valid
+ if ( $titleObj->isExternal() || !$titleObj->canExist() ) {
+ $redirValues[count( $redirValues ) - 1]['to'] = $titleObj->getFullText();
+ $this->dieWithError(
+ [
+ 'apierror-edit-invalidredirect',
+ Message::plaintextParam( $oldTitle->getPrefixedText() ),
+ Message::plaintextParam( $titleObj->getFullText() ),
+ ],
+ 'edit-invalidredirect',
+ [ 'redirects' => $redirValues ]
+ );
+ }
}
ApiResult::setIndexedTagName( $redirValues, 'r' );