From c51dcd98a7a1e6b78053654317eff5ee5b40a02d Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Fri, 8 Jun 2018 12:27:11 +0200 Subject: [PATCH] fix #656 - Crash due to unsafe access in infinite range check --- src/dscanner/analysis/incorrect_infinite_range.d | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/dscanner/analysis/incorrect_infinite_range.d b/src/dscanner/analysis/incorrect_infinite_range.d index 499af70..2949ac2 100644 --- a/src/dscanner/analysis/incorrect_infinite_range.d +++ b/src/dscanner/analysis/incorrect_infinite_range.d @@ -62,7 +62,7 @@ final class IncorrectInfiniteRangeCheck : BaseAnalyzer override void visit(const ReturnStatement rs) { - if (rs.expression.items.length != 1) + if (!rs.expression || rs.expression.items.length != 1) return; UnaryExpression unary = cast(UnaryExpression) rs.expression.items[0]; if (unary is null) @@ -126,3 +126,13 @@ class C { bool empty() { return false; } } // [warn]: %1$s stderr.writeln("Unittest for IncorrectInfiniteRangeCheck passed."); } + +// test for https://github.com/dlang-community/D-Scanner/issues/656 +// unittests are skipped but D-Scanner sources are self checked +version(none) struct Foo +{ + void empty() + { + return; + } +}