Added cite error checks for invalid text direction

* Error case of dir= not ltr or rtl is caught and a cite tests
   validates the new check.

Bug: T51538
Change-Id: I8c7e088416f0a000e638771a3fe5e8e0c58bcc23
This commit is contained in:
sbailey 2020-10-05 12:47:40 -07:00
parent 1ac603ff1c
commit aadef667d4

View file

@ -150,6 +150,7 @@ class References extends ExtensionTagHandler {
// to TokenUtils::kvToHash() and ExtensionHandler::normalizeExtOptions() // to TokenUtils::kvToHash() and ExtensionHandler::normalizeExtOptions()
$refName = $refDmw->attrs->name ?? ''; $refName = $refDmw->attrs->name ?? '';
$followName = $refDmw->attrs->follow ?? ''; $followName = $refDmw->attrs->follow ?? '';
$refDir = strtolower( $refDmw->attrs->dir ?? '' );
// Looks like Cite.php doesn't try to fix ids that already have // Looks like Cite.php doesn't try to fix ids that already have
// a "_" in them. Ex: name="a b" and name="a_b" are considered // a "_" in them. Ex: name="a b" and name="a_b" are considered
@ -216,6 +217,10 @@ class References extends ExtensionTagHandler {
); );
} }
if ( isset( $refDmw->attrs->dir ) && $refDir !== 'rtl' && $refDir !== 'ltr' ) {
$errs[] = [ 'key' => 'cite_error_ref_invalid_dir' ];
}
// Check for missing content, added ?? '' to fix T259676 crasher // Check for missing content, added ?? '' to fix T259676 crasher
// FIXME: See T260082 for a more complete description of cause and deeper fix // FIXME: See T260082 for a more complete description of cause and deeper fix
$missingContent = ( !empty( $cDp->empty ) || trim( $refDmw->body->extsrc ?? '' ) === '' ); $missingContent = ( !empty( $cDp->empty ) || trim( $refDmw->body->extsrc ?? '' ) === '' );
@ -333,7 +338,7 @@ class References extends ExtensionTagHandler {
// Keep the first content to compare multiple <ref>s with the same name. // Keep the first content to compare multiple <ref>s with the same name.
if ( $ref->contentId === null && !$missingContent ) { if ( $ref->contentId === null && !$missingContent ) {
$ref->contentId = $contentId; $ref->contentId = $contentId;
$ref->dir = strtolower( $refDmw->attrs->dir ?? '' ); $ref->dir = $refDir;
} else { } else {
DOMCompat::remove( $c ); DOMCompat::remove( $c );
$extApi->clearContentDOM( $contentId ); $extApi->clearContentDOM( $contentId );