The "From" address should also probably be anonymized for flagged mail.
- Queries
- All Stories
- Search
- Advanced Search
- Transactions
- Transaction Logs
All Stories
Feb 6 2018
Feb 5 2018
Who knows what the Bad People would have one if they'd intercepted it!
When an object is updated via an "inverse edge" change (normally: when it is mentioned, or when another object is linked to it) we currently do not fire Herald rules. The corresponding block in the code has this comment:
In T13053#235208, @epriestley wrote:Hrrrm...
Hrrrm...
🎉🎉🎉 I RECEIVED AN EMAIL AND CLICKED A LINK CONTAINED INSIDE IT 🎉🎉🎉
Ah, it looks like Google Groups spam filtered some of the Twitter verification mail!
Some of this seems to be that messages sent from my @phacility.com address are sometimes eaten entirely (?) or just not delivered to me (?), presumably because I'm a recipient. I still haven't been able to get the confirmation link from Twitter, but it's possible that's on Twitter's end.
I figured some of this might be Safari vs Chrome, even though there's no obvious indication that Safari is having issues (e.g., I didn't catch any JS errors in the console).
There's an hourglass icon in the header menu. I don't know what this is for. When I click this, I get a "Loading..." menu which never loads. I reloaded the page, too. There's nothing pertinent in the console error log.
We received our first credit card dispute on January 31st.
Feb 4 2018
D18988 addresses the issue from D18105 (git grep 🐑 fails) more directly by calling @setlocale(LC_ALL, 'en_US.UTF-8') unconditionally during startup. The motivating case in T13060 is:
Feb 3 2018
(Future me, see also PHI343.)
The above workaround is not reliable since it skips the files entirely vs checking the remaining characters.
I think I didn't kick Apache hard enough since I eventually rammed this through with setlocale().
setlocale(...) doesn't (?) appear to work from within Apache (?).
Thankfully, it seems that setlocale(LC_ALL, 'en_US.UTF-8'); from within PHP does work, so we don't need to figure out what PAM initialization cache file Ubuntu is actually reading LANG settings from.
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 also does not work, although this is apparently just a Perl script that rewrites /etc/default/locale for you.
Setting LANG in /etc/environment had no effect on anything.
I now strongly believe this is some kind of terminal environment problem. This script has different behavior in production and on my laptop:
No luck, I don't even see any bugs in Differential locally with that change (the en-dash decodes and renders properly). So this might be in the realm of T7339.
Same result.
Same results for spaces.
To try to reproduce this, I did this:
Feb 2 2018
Vaguely related, the subject line for this mail is currently something like:
🐱 🐟
We have also found legitimate users who have valid email addresses (Irish users) that are not accepted.
For those visiting from the future via search, I have decided to publish an unofficial bug patch in a github repo, as it breaks once in awhile due to upstream changes.
For those visiting from the future via search, I have decided to publish the unofficial patch in a github repo, as it breaks once in awhile due to upstream changes.
Thanks @mcorteel, I'll take a look.
contains complex HTML elements (like inline comments) which would also need to be stored in a structured way and then rendered just-in-time
While it's on my mind -- these messages link to /mail/whatever/123/ right now, but that page doesn't hyperlink links in the mail body, which is a fairly significant usability issue since the workflow is: click the link to go to the mail, read the mail body, copy paste the link in the mail body into your address bar.
Feb 1 2018
This report doesn't include working reproduction instructions so we can't move forward.
I can't reproduce this; it may have been fixed by D18776 + D18778.
My call with Mailgun was generally reassuring. Based on an uncharitable reading of the January 5th disclosure, my major concern was that they might be starting from a cultural position which was blind to internal actors as threats and everyone just used root / hunter2 written on a sticky note to log in to everything or something like that.
I am also interested in this; it's not uncommon that an engineer is testing a regression somewhere and wants to trigger a full CI build of an old revision. Today, their options are (a) have admin access to the Harbormaster Build Plan, which requires a large amount of trust or (b) bother someone who does have admin access to press buttons.
I would also be interested in this feature; here's our use-case if you possibly find it more persuasive than OP's:
I suppose another reasonable attacker is "laptop thieves", but deleting any locally stored mail which was accidentally transmitted in the open seems like a reasonable way to recover from any confusion that arises until we figure out how foolproof the behavior needs to be.
The intended trigger for "Must Encrypt" is Herald rules like this:
The "Must Encrypt" change will necessarily link into the existing /mail/ web UI so users can read the mail content, so it's probably worth considering possible improvements.
Although I'm suppressing the X-Phabricator-To and X-Phabricator-Cc headers for "Must Encrypt" mail (and the "To: ..." and "Cc: ..." footers in the body), the recipients will still be visible in the actual "To" and "Cc" lines if metamta.one-mail-per-recipient has been configured to false instead of the default (which is true).
On Thread-Topic, this very old thread suggests that Outlook can show the header in some cases: https://bugzilla.mozilla.org/show_bug.cgi?id=411601
@cmmata here is my diff. It can probably be improved, but it works for me:
| 1 | diff --git a/src/unit/engine/PhpunitTestEngine.php b/src/unit/engine/PhpunitTestEngine.php |
|---|---|
| 2 | index 8206b787..ef01fda4 100644 |
| 3 | --- a/src/unit/engine/PhpunitTestEngine.php |
| 4 | +++ b/src/unit/engine/PhpunitTestEngine.php |
| 5 | @@ -52,7 +52,7 @@ final class PhpunitTestEngine extends ArcanistUnitTestEngine { |
| 6 | if (!Filesystem::pathExists($test_path)) { |
| 7 | continue; |
| 8 | } |
| 9 | - $json_tmp = new TempFile(); |
| 10 | + $xml_tmp = new TempFile(); |
| 11 | $clover_tmp = null; |
| 12 | $clover = null; |
| 13 | if ($this->getEnableCoverage() !== false) { |
| 14 | @@ -64,10 +64,10 @@ final class PhpunitTestEngine extends ArcanistUnitTestEngine { |
| 15 | |
| 16 | $stderr = '-d display_errors=stderr'; |
| 17 | |
| 18 | - $futures[$test_path] = new ExecFuture('%C %C %C --log-json %s %C %s', |
| 19 | - $this->phpunitBinary, $config, $stderr, $json_tmp, $clover, $test_path); |
| 20 | + $futures[$test_path] = new ExecFuture('%C %C %C --log-junit %s %C %s', |
| 21 | + $this->phpunitBinary, $config, $stderr, $xml_tmp, $clover, $test_path); |
| 22 | $tmpfiles[$test_path] = array( |
| 23 | - 'json' => $json_tmp, |
| 24 | + 'xml' => $xml_tmp, |
| 25 | 'clover' => $clover_tmp, |
| 26 | ); |
| 27 | } |
| 28 | @@ -81,7 +81,7 @@ final class PhpunitTestEngine extends ArcanistUnitTestEngine { |
| 29 | |
| 30 | $results[] = $this->parseTestResults( |
| 31 | $test, |
| 32 | - $tmpfiles[$test]['json'], |
| 33 | + $tmpfiles[$test]['xml'], |
| 34 | $tmpfiles[$test]['clover'], |
| 35 | $stderr); |
| 36 | } |
| 37 | @@ -90,17 +90,17 @@ final class PhpunitTestEngine extends ArcanistUnitTestEngine { |
| 38 | } |
| 39 | |
| 40 | /** |
| 41 | - * Parse test results from phpunit json report. |
| 42 | + * Parse test results from phpunit XML report. |
| 43 | * |
| 44 | * @param string $path Path to test |
| 45 | - * @param string $json_tmp Path to phpunit json report |
| 46 | + * @param string $xml_tmp Path to phpunit XML report |
| 47 | * @param string $clover_tmp Path to phpunit clover report |
| 48 | * @param string $stderr Data written to stderr |
| 49 | * |
| 50 | * @return array |
| 51 | */ |
| 52 | - private function parseTestResults($path, $json_tmp, $clover_tmp, $stderr) { |
| 53 | - $test_results = Filesystem::readFile($json_tmp); |
| 54 | + private function parseTestResults($path, $xml_tmp, $clover_tmp, $stderr) { |
| 55 | + $test_results = Filesystem::readFile($xml_tmp); |
| 56 | return id(new ArcanistPhpunitTestResultParser()) |
| 57 | ->setEnableCoverage($this->getEnableCoverage()) |
| 58 | ->setProjectRoot($this->projectRoot) |
| 59 | diff --git a/src/unit/parser/ArcanistPhpunitTestResultParser.php b/src/unit/parser/ArcanistPhpunitTestResultParser.php |
| 60 | index 5ccff970..3d7fcd77 100644 |
| 61 | --- a/src/unit/parser/ArcanistPhpunitTestResultParser.php |
| 62 | +++ b/src/unit/parser/ArcanistPhpunitTestResultParser.php |
| 63 | @@ -9,10 +9,10 @@ |
| 64 | final class ArcanistPhpunitTestResultParser extends ArcanistTestResultParser { |
| 65 | |
| 66 | /** |
| 67 | - * Parse test results from phpunit json report |
| 68 | + * Parse test results from phpunit XML report |
| 69 | * |
| 70 | * @param string $path Path to test |
| 71 | - * @param string $test_results String containing phpunit json report |
| 72 | + * @param string $test_results String containing phpunit XML report |
| 73 | * |
| 74 | * @return array |
| 75 | */ |
| 76 | @@ -25,7 +25,7 @@ final class ArcanistPhpunitTestResultParser extends ArcanistTestResultParser { |
| 77 | return array($result); |
| 78 | } |
| 79 | |
| 80 | - $report = $this->getJsonReport($test_results); |
| 81 | + $report = simplexml_load_string($test_results); |
| 82 | |
| 83 | // coverage is for all testcases in the executed $path |
| 84 | $coverage = array(); |
| 85 | @@ -36,56 +36,36 @@ final class ArcanistPhpunitTestResultParser extends ArcanistTestResultParser { |
| 86 | $last_test_finished = true; |
| 87 | |
| 88 | $results = array(); |
| 89 | - foreach ($report as $event) { |
| 90 | - switch (idx($event, 'event')) { |
| 91 | - case 'test': |
| 92 | - break; |
| 93 | - case 'testStart': |
| 94 | - $last_test_finished = false; |
| 95 | - // fall through |
| 96 | - default: |
| 97 | - continue 2; // switch + loop |
| 98 | - } |
| 99 | - |
| 100 | + foreach ($report->testsuite as $test_suite) { |
| 101 | $status = ArcanistUnitTestResult::RESULT_PASS; |
| 102 | $user_data = ''; |
| 103 | |
| 104 | - if ('fail' == idx($event, 'status')) { |
| 105 | + if ((int)$test_suite['failures'] > 0) { |
| 106 | $status = ArcanistUnitTestResult::RESULT_FAIL; |
| 107 | - $user_data .= idx($event, 'message')."\n"; |
| 108 | - foreach (idx($event, 'trace') as $trace) { |
| 109 | - $user_data .= sprintf( |
| 110 | - "\n%s:%s", |
| 111 | - idx($trace, 'file'), |
| 112 | - idx($trace, 'line')); |
| 113 | + foreach ($test_suite->testcase as $test_case) { |
| 114 | + foreach ($test_case->failure as $failure) { |
| 115 | + $user_data .= sprintf( |
| 116 | + "\n%s", |
| 117 | + (string)$failure); |
| 118 | + } |
| 119 | } |
| 120 | - } else if ('error' == idx($event, 'status')) { |
| 121 | - if (strpos(idx($event, 'message'), 'Skipped Test') !== false) { |
| 122 | - $status = ArcanistUnitTestResult::RESULT_SKIP; |
| 123 | - $user_data .= idx($event, 'message'); |
| 124 | - } else if (strpos( |
| 125 | - idx($event, 'message'), |
| 126 | - 'Incomplete Test') !== false) { |
| 127 | - $status = ArcanistUnitTestResult::RESULT_SKIP; |
| 128 | - $user_data .= idx($event, 'message'); |
| 129 | - } else { |
| 130 | - $status = ArcanistUnitTestResult::RESULT_BROKEN; |
| 131 | - $user_data .= idx($event, 'message'); |
| 132 | - foreach (idx($event, 'trace') as $trace) { |
| 133 | - $user_data .= sprintf( |
| 134 | - "\n%s:%s", |
| 135 | - idx($trace, 'file'), |
| 136 | - idx($trace, 'line')); |
| 137 | + } else if ($test_suite['errors'] > 0) { |
| 138 | + $status = ArcanistUnitTestResult::RESULT_BROKEN; |
| 139 | + foreach ($test_suite->testcase as $test_case) { |
| 140 | + foreach ($test_case->error as $error) { |
| 141 | + $user_data .= sprintf( |
| 142 | + "\n%s", |
| 143 | + (string)$error); |
| 144 | } |
| 145 | } |
| 146 | } |
| 147 | |
| 148 | - $name = preg_replace('/ \(.*\)/s', '', idx($event, 'test')); |
| 149 | + $name = preg_replace('/ \(.*\)/s', '', $test_suite['name']); |
| 150 | |
| 151 | $result = new ArcanistUnitTestResult(); |
| 152 | $result->setName($name); |
| 153 | $result->setResult($status); |
| 154 | - $result->setDuration(idx($event, 'time')); |
| 155 | + $result->setDuration((float)$test_suite['time']); |
| 156 | $result->setCoverage($coverage); |
| 157 | $result->setUserData($user_data); |
| 158 | |
| 159 | @@ -95,7 +75,7 @@ final class ArcanistPhpunitTestResultParser extends ArcanistTestResultParser { |
| 160 | |
| 161 | if (!$last_test_finished) { |
| 162 | $results[] = id(new ArcanistUnitTestResult()) |
| 163 | - ->setName(idx($event, 'test')) // use last event |
| 164 | + ->setName($test_suite['name']) // use last event |
| 165 | ->setUserData($this->stderr) |
| 166 | ->setResult(ArcanistUnitTestResult::RESULT_BROKEN); |
| 167 | } |
| 168 | @@ -161,28 +141,4 @@ final class ArcanistPhpunitTestResultParser extends ArcanistTestResultParser { |
| 169 | return $reports; |
| 170 | } |
| 171 | |
| 172 | - /** |
| 173 | - * We need this non-sense to make json generated by phpunit |
| 174 | - * valid. |
| 175 | - * |
| 176 | - * @param string $json String containing JSON report |
| 177 | - * @return array JSON decoded array |
| 178 | - */ |
| 179 | - private function getJsonReport($json) { |
| 180 | - |
| 181 | - if (empty($json)) { |
| 182 | - throw new Exception( |
| 183 | - pht( |
| 184 | - 'JSON report file is empty, it probably means that phpunit '. |
| 185 | - 'failed to run tests. Try running %s with %s option and then run '. |
| 186 | - 'generated phpunit command yourself, you might get the answer.', |
| 187 | - 'arc unit', |
| 188 | - '--trace')); |
| 189 | - } |
| 190 | - |
| 191 | - $json = preg_replace('/}{\s*"/', '},{"', $json); |
| 192 | - $json = '['.$json.']'; |
| 193 | - return phutil_json_decode($json); |
| 194 | - } |
| 195 | - |
| 196 | } |
@mcorteel I have the same problem, arc unit only works with phpunit 5.7. If I use 6.5, it fails. Do you have that patch anywhere with public access so we can use it while it's not published?
Here I was thinking I found a helpful public bug.
From rereading D18600, maybe "ridiculously strong" is an understatement and it was actually so powerful it took effect even if you didn't enable it.
Locally, seems like "No Notifications" correctly has no effect on the "Upload" bubble being shown at HEAD of master.
Hm, actually the problem here is that the notification bubble doesn't show up for any file uploads on our current version. I suppose it could actually be "on our current version + extensions". I'll get a reproduction matrix together tomorrow.
Not unless something super weird/buggy is going on.
We don't have a notifications server, does that make it like that?
It's possible that adjusting Settings → Notifications to No Notifications disables this bubble, if that's a compounding factor here. D18600 pulled back some of the aggressiveness of that setting but I'd guess it might still be hitting the upload progress bubbles.
Ok I actually get a dialog on secure., it's probably because we're out of date with the upstream.
What browser are you using? I get a progress bubble in the lower left immediately. Here's a screenshot -- note the blue upload progress element in the lower left corner.