Merge pull request #2384 from henryhchchc/master

Checking the validity of line range before generating code actions
diff --git a/verible/verilog/tools/ls/autoexpand.cc b/verible/verilog/tools/ls/autoexpand.cc
index c48e2c8..0f9d5c4 100644
--- a/verible/verilog/tools/ls/autoexpand.cc
+++ b/verible/verilog/tools/ls/autoexpand.cc
@@ -1689,6 +1689,7 @@
     const BufferTracker *const tracker, const CodeActionParams &p) {
   Interval<size_t> line_range{static_cast<size_t>(p.range.start.line),
                               static_cast<size_t>(p.range.end.line)};
+  if (!line_range.valid()) return {};
   if (!tracker) return {};
   const auto current = tracker->current();
   if (!current) return {};  // Can only expand if we have latest version
diff --git a/verible/verilog/tools/ls/autoexpand_test.cc b/verible/verilog/tools/ls/autoexpand_test.cc
index 4b313a0..2b05f09 100644
--- a/verible/verilog/tools/ls/autoexpand_test.cc
+++ b/verible/verilog/tools/ls/autoexpand_test.cc
@@ -3600,6 +3600,43 @@
   );
 }
 
+TEST(Autoexpand, InvalidLineRange) {
+  TestTextEdits(
+      R"(
+module foo (  /*AUTOARG*/);
+  /*AUTOINPUT*/
+  /*AUTOOUTPUT*/
+
+  /* qux AUTO_TEMPLATE
+     bar AUTO_TEMPLATE (
+         .o1(out_a[]),
+         .o2(out_b[])
+     ); */
+  bar b (  /*AUTOINST*/);
+endmodule
+)",
+      R"(
+module foo (  /*AUTOARG*/);
+  /*AUTOINPUT*/
+  /*AUTOOUTPUT*/
+
+  /* qux AUTO_TEMPLATE
+     bar AUTO_TEMPLATE (
+         .o1(out_a[]),
+         .o2(out_b[])
+     ); */
+  bar b (  /*AUTOINST*/);
+endmodule
+)",
+      TestRun{.edit_fn = [](SymbolTableHandler *symbol_table_handler,
+                            BufferTracker *tracker) {
+        return AutoExpandCodeActionToTextEdits(
+            symbol_table_handler, tracker,
+            {.start = {.line = 5}, .end = {.line = 1}},
+            "Expand with invalid range");
+      }}.repeat());
+}
+
 TEST(Autoexpand, InstanceNotModule) {
   TestTextEdits(
       R"(