From 13492c8043a4f04c9b270fda3d6b5f05267667e2 Mon Sep 17 00:00:00 2001 From: Joshua Spence Date: Thu, 25 Sep 2014 07:33:24 +1000 Subject: [PATCH] Fix a fatal error in `ArcanistXHPASTLinter` Summary: I had assumed that we would always be interested in `n_STATEMENT_LIST`, which is fine for `if (...) { some_statements(); }` but not for `if (...) one_statement();`. Test Plan: Added a test case. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: epriestley, Korvin Differential Revision: https://secure.phabricator.com/D10551 --- src/lint/linter/ArcanistXHPASTLinter.php | 2 +- src/lint/linter/__tests__/xhpast/conditional-usage.lint-test | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lint/linter/ArcanistXHPASTLinter.php b/src/lint/linter/ArcanistXHPASTLinter.php index 1b65f6cf..b005ea48 100644 --- a/src/lint/linter/ArcanistXHPASTLinter.php +++ b/src/lint/linter/ArcanistXHPASTLinter.php @@ -426,7 +426,7 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter { } $span = $conditional - ->getChildOfType(1, 'n_STATEMENT_LIST') + ->getChildByIndex(1) ->getTokens(); $whitelist[$type][$symbol_name][] = range( diff --git a/src/lint/linter/__tests__/xhpast/conditional-usage.lint-test b/src/lint/linter/__tests__/xhpast/conditional-usage.lint-test index 32dc71d9..2c98f060 100644 --- a/src/lint/linter/__tests__/xhpast/conditional-usage.lint-test +++ b/src/lint/linter/__tests__/xhpast/conditional-usage.lint-test @@ -12,6 +12,9 @@ if (class_exists('CURLFile')) { new DateTimeImmutable(); } +if (function_exists('json_last_error_msg')) + json_last_error_msg(); + // These shouldn't fatal. if (SomeClass::someStaticMethod($param)) {} $var = 'some_func';