mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-20 20:40:56 +01:00
Fix over-matching of quoted text for message bodies beginning with "On..."
Summary: A user sent a message to Phabricator which looked like: On blah blah blah ? On <date>, <user> wrote: > blah blah blah The current algorithm is too aggressive and thinks lines 1-3 are //all// the "On ... wrote:" string. Instead, patch only the most recent "On". Test Plan: Added a failing test and made it pass. Reviewers: btrahan, zeeg Reviewed By: zeeg CC: aran Differential Revision: https://secure.phabricator.com/D7732
This commit is contained in:
parent
3ad4be4d93
commit
f69793184e
2 changed files with 37 additions and 4 deletions
|
@ -50,10 +50,29 @@ final class PhabricatorMetaMTAEmailBodyParser {
|
|||
}
|
||||
|
||||
private function stripQuotedText($body) {
|
||||
$body = preg_replace(
|
||||
'/^\s*>?\s*On\b.*\bwrote:.*?/msU',
|
||||
'',
|
||||
$body);
|
||||
|
||||
// Look for "On <date>, <user> wrote:". This may be split across multiple
|
||||
// lines. We need to be careful not to remove all of a message like this:
|
||||
//
|
||||
// On which day do you want to meet?
|
||||
//
|
||||
// On <date>, <user> wrote:
|
||||
// > Let's set up a meeting.
|
||||
|
||||
$start = null;
|
||||
$lines = phutil_split_lines($body);
|
||||
foreach ($lines as $key => $line) {
|
||||
if (preg_match('/^\s*>?\s*On\b/', $line)) {
|
||||
$start = $key;
|
||||
}
|
||||
if ($start !== null) {
|
||||
if (preg_match('/\bwrote:/', $line)) {
|
||||
$lines = array_slice($lines, 0, $start);
|
||||
$body = implode('', $lines);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Outlook english
|
||||
$body = preg_replace(
|
||||
|
|
|
@ -31,6 +31,20 @@ final class PhabricatorMetaMTAEmailBodyParserTestCase
|
|||
}
|
||||
}
|
||||
|
||||
public function testFalsePositiveForOnWrote() {
|
||||
$body = <<<EOEMAIL
|
||||
On which horse shall you ride?
|
||||
|
||||
On Sep 23, alincoln wrote:
|
||||
|
||||
> Hey bro do you want to go ride horses tomorrow?
|
||||
EOEMAIL;
|
||||
|
||||
$parser = new PhabricatorMetaMTAEmailBodyParser();
|
||||
$stripped = $parser->stripTextBody($body);
|
||||
$this->assertEqual("On which horse shall you ride?", $stripped);
|
||||
}
|
||||
|
||||
private function getEmailBodiesWithFullCommands() {
|
||||
$bodies = $this->getEmailBodies();
|
||||
$with_commands = array();
|
||||
|
|
Loading…
Reference in a new issue