From bd1da9da6c67df91b283c932cc3695655ea4d5d6 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 23 Jul 2015 13:19:53 -0700 Subject: [PATCH] Improve strictness around `setLine()` types in ArcanistLintMessage Summary: Fixes T8921. Harbormaster is strict about types it accepts, but `ArcanistLintMessage` is more liberal. Push the strictness barrier down to the linter level, while maintaining reasonable flexibility in the API. Test Plan: `arc unit --everything` Reviewers: btrahan, chad Reviewed By: chad Subscribers: epriestley Maniphest Tasks: T8921 Differential Revision: https://secure.phabricator.com/D13695 --- src/lint/ArcanistLintMessage.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lint/ArcanistLintMessage.php b/src/lint/ArcanistLintMessage.php index 8d7eb78b..40502020 100644 --- a/src/lint/ArcanistLintMessage.php +++ b/src/lint/ArcanistLintMessage.php @@ -72,6 +72,23 @@ final class ArcanistLintMessage extends Phobject { } public function setLine($line) { + if ($line === null) { + // This just means that we don't have any line information. + } else { + // For compatibility, accept digit strings since a lot of linters pass + // line numbers that they have parsed from command output or XML, which + // won't be properly typed. + if (is_string($line) && preg_match('/^\d+\z/', $line)) { + $line = (int)$line; + } + + if (!is_int($line)) { + throw new Exception( + pht( + 'Parameter passed to setLine() must be an integer.')); + } + } + $this->line = $line; return $this; }