From eb81a1c0f12d9a06015027f330b245359765af24 Mon Sep 17 00:00:00 2001 From: WMDE-Fisch Date: Tue, 7 Feb 2017 19:34:51 +0100 Subject: [PATCH] Avoid unintended mentions when changing content When content is changed and the change contains the signature of the user, the method checking for reasonable mentions in that changes did not consider multiple signatures. The patch fixes that and adds a test for it. Bug: T154406 Change-Id: I86303f42e97d16c68e3235b0e2d13542ceedf1fe --- includes/DiscussionParser.php | 9 ++++++++- tests/phpunit/DiscussionParserTest.php | 10 ++++++++++ tests/phpunit/revision_txt/987667998.txt | 15 +++++++++++++++ tests/phpunit/revision_txt/987667999.txt | 15 +++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 tests/phpunit/revision_txt/987667998.txt create mode 100644 tests/phpunit/revision_txt/987667999.txt diff --git a/includes/DiscussionParser.php b/includes/DiscussionParser.php index 9931be8d8..cba02b49f 100644 --- a/includes/DiscussionParser.php +++ b/includes/DiscussionParser.php @@ -460,6 +460,8 @@ abstract class EchoDiscussionParser { * not currently analysed. * - unknown-change: Some content was replaced with other content. * - unknown-signed-change: Same as unknown-change, but signed. + * - unknown-multi-signed-change: Same as unknown-change, + * but it contains multiple signatures. * - unknown: Unrecognised change type. */ static function interpretDiff( $changes, $username, Title $title = null ) { @@ -602,7 +604,12 @@ abstract class EchoDiscussionParser { $action['type'] === 'unknown-change' && self::isInSignedSection( $action['right-pos'], $signedSections ) ) { - $action['type'] = 'unknown-signed-change'; + $signedUsers = self::getSignedUsers( $action['new_content'], null ); + if ( count( $signedUsers ) === 1 ) { + $action['type'] = 'unknown-signed-change'; + } else { + $action['type'] = 'unknown-multi-signed-change'; + } } return $action; diff --git a/tests/phpunit/DiscussionParserTest.php b/tests/phpunit/DiscussionParserTest.php index 7e2286d4e..a920ecf08 100644 --- a/tests/phpunit/DiscussionParserTest.php +++ b/tests/phpunit/DiscussionParserTest.php @@ -326,6 +326,16 @@ class EchoDiscussionParserTest extends MediaWikiTestCase { ], 'precondition' => 'isParserFunctionsInstalled', ], + // T154406 unintended mentions when changing content + [ + 'new' => 987667999, + 'old' => 987667998, + 'username' => 'Admin', + 'lang' => 'en', + 'pages' => [], + 'title' => 'MultipleSignatureMentions', + 'expected' => [], + ], ]; } diff --git a/tests/phpunit/revision_txt/987667998.txt b/tests/phpunit/revision_txt/987667998.txt new file mode 100644 index 000000000..371276ce2 --- /dev/null +++ b/tests/phpunit/revision_txt/987667998.txt @@ -0,0 +1,15 @@ +== Old Content == + +== Section 1 == +Lorem ipsum amet, ut officia eius nihil ad qui ducimus, minus impedit, voluptas neque in quia autem hic animi, quisquam blanditiis adipisci accusantium laudantium, eligendi dolor eligendi enim dolor laborum commodi laboris debitis debitis numquam odit dolore quidem qui doloribus incidunt, aliquid sit quam nostrum cum ad suscipit enim consequatur, est ut rerum fuga. Voluptatum fuga. Doloribus et itaque sequi esse, ea eiusmod hic in suscipit nihil est corrupti, molestias ut sunt, velit cumque ut enim inventore veniam, sequi est ea cillum error veniam, quisquam veniam, ad quisquam delectus, eos omnis eaqu. +Ipsum harum maiores consectetur, nulla debitis molestiae sit cum quidem enim alias tenetur dolores architecto quia repellendus. Doloribus duis enim sunt, iste nulla enim dolores sit, voluptatem qui. + +== Section 2 == +Lorem ipsum qui quis nihil eius ea irure voluptas dolorem consequuntur et officia sit, iure amet, id optio, dolor distinctio. Quia qui aliqua. Sint mollit dolor consectetur sapiente est numquam obcaecati error ea qui est magnam placeat, reprehenderit, quia cum atque incididunt sit eu est, temporibus qui eaque iste id, et ut eu explicabo. Recusandae. Hic voluptatem. Dolor dolores occaecat odio natus dolorum cupidatat blanditiis ratione quidem aliquid anim accusamus ut expedita blanditiis reprehenderit neque ea quas quaerat omnis eu placeat, excepteur inventore consequat. Dolore animi, minima ut dignissimos facere et aut consequat. Incidunt, lorem se. +Other Line +Ipsum harum maiores consectetur, nulla debitis molestiae sit cum quidem enim alias tenetur dolores architecto quia repellendus. Doloribus duis enim sunt, iste nulla enim dolores sit, voluptatem qui. + +== Section 3 == +Lorem ipsum qui quis nihil eius ea irure voluptas dolorem consequuntur et officia sit, iure amet, id optio, dolor distinctio. Quia qui aliqua. Sint mollit dolor consectetur sapiente est numquam obcaecati error ea qui est magnam placeat, reprehenderit, quia cum atque incididunt sit eu est, temporibus qui eaque iste id, et ut eu explicabo. Recusandae. Hic voluptatem. Dolor dolores occaecat odio natus dolorum cupidatat blanditiis ratione quidem aliquid anim accusamus ut expedita blanditiis reprehenderit neque ea quas quaerat omnis eu placeat, excepteur inventore consequat. Dolore animi, minima ut dignissimos facere et aut consequat. Incidunt, lorem se. + +Lorem ipsum ea architecto magna ut quia iure dolor nobis iste aut quam quos voluptatem consequatur? Et deleniti excepteur beatae voluptatem, odit qui necessitatibus pariatur? Repellendus. Est minus odio est architecto molestiae quis perferendis porro tempore, quidem Nam officia autem voluptatem. Qui officia quo occaecat pariatur. Aliquip dolorum et quam ut eos, excepturi soluta delectus, voluptate architecto sint voluptatem molestiae libero proident, esse, culpa, velit repellendus. Quaerat ut sed soluta magni voluptatem. Laborum. Amet, et consectetur nisi ut quia est in mollitia sed quibusdam nulla qui explicabo. Hic vel quis nihi. \ No newline at end of file diff --git a/tests/phpunit/revision_txt/987667999.txt b/tests/phpunit/revision_txt/987667999.txt new file mode 100644 index 000000000..4f9e18b77 --- /dev/null +++ b/tests/phpunit/revision_txt/987667999.txt @@ -0,0 +1,15 @@ +== Replace Content == + +== Section 4 == +Lorem ipsum eligendi rerum nesciunt, iusto do dolore officia sint inventore qui fugiat eos dolor debitis debitis laborum cum alias anim laborum. Mollitia ullam esse quidem reprehenderit, ipsum, magni quae praesentium harum veniam, ipsa, exercitationem Nam elit, cupiditate enim aut omnis ipsum, voluptates exercitationem voluptatem qui odio ullam voluptates aut sint cupidatat commodi voluptatum in pariatur? Dolor dolores aperiam vel voluptatum non debitis aliquid sunt magni est iure obcaecati cum harum qui id deserunt possimus, enim corporis au. + +== Section 5 == +Lorem ipsum porro beatae sapiente amet, ea sit, velit, non odit quisquam mollit est, voluptatum consectetur, tenetur aut dolores cum sed ad labore ea veniam, eos velit minima consequatur veniam, voluptas obcaecati aliquid dolore ab occaecat do voluptatem. Minus ut elit, quasi voluptatibus pariatur. Sit aliquip nisi quisquam temporibus rerum esse quas necessitatibus recusandae. Culpa dolor voluptatem. Nesciunt, incididunt temporibus in dicta dolor saepe eiusmod aute. +Hi - [[User:He7d3r|He7d3r]] ([[User talk:He7d3r|talk]]) 14:19, 9 February 2017 (UTC) +:Hi, you! - [[User:Test11|Test11]] ([[User talk:Test11|talk]]) 14:19, 10 February 2017 (UTC) +::Hi, as well! - [[:User:Admin|Admin]] 23:47, 11 February 2017 (UTC) + +== Section 6 == +Lorem ipsum molestiae quia voluptatibus aliquid quis ut ullamco vitae adipisicing enim voluptas dolores consectetur ducimus, quia qui eos, aut sint ut corporis mollitia recusandae. Et impedit, omnis earum magni iur. +Lorem ipsum numquam sint mollitia vel voluptatem nihil reprehenderit, enim qui voluptatum eligendi animi, id, in qui Nam saepe adipisci qui voluptas libero ut ut adipisicing provident, ut animi, deleniti sed voluptas id, sit minus modi molestias rerum illum, excepteu. +Lorem ipsum qui est, deleniti veniam, eos, qui labore nihil numquam inventore mollit alias sapiente ad perferendis cillum incididunt qui consectetur amet, aliquip in maiores tempore, a dolore corporis eu optio, quod excepteur illo minima laboris duis aut reiciendis ducimus, sunt error enim anim ducimus, nisi doloribus veniam, eius ea voluptate. \ No newline at end of file