diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 0ffeda2ada8..f4c3b9034c7 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -121,7 +121,7 @@ fn read_manifest_from_str( .rfind('\n') .map(|s| s + 1) .unwrap_or(0); - let source_end = contents[span.end - 1..] + let source_end = contents[span.end.saturating_sub(1)..] .find('\n') .map(|s| s + span.end) .unwrap_or(contents.len()); diff --git a/tests/testsuite/diagnostics.rs b/tests/testsuite/diagnostics.rs new file mode 100644 index 00000000000..2de841825f2 --- /dev/null +++ b/tests/testsuite/diagnostics.rs @@ -0,0 +1,30 @@ +use cargo_test_support::project; + +#[cargo_test] +fn dont_panic_on_render() { + let p = project() + .file( + "Cargo.toml", + r#" +[package] +name = "foo" +version = "0.1.0" +edition = "2021" +[[bench.foo]] +"#, + ) + .file("src/lib.rs", "") + .build(); + + p.cargo("check") + .with_status(101) + .with_stderr( + "\ +error: invalid type: map, expected a sequence +--> Cargo.toml:1:1 + | + | +", + ) + .run(); +} diff --git a/tests/testsuite/main.rs b/tests/testsuite/main.rs index 4643f25f834..1ec140d7618 100644 --- a/tests/testsuite/main.rs +++ b/tests/testsuite/main.rs @@ -79,6 +79,7 @@ mod cross_publish; mod custom_target; mod death; mod dep_info; +mod diagnostics; mod direct_minimal_versions; mod directory; mod doc;