Skip to content

Commit cb610ec

Browse files
adamchainzth1000s
authored andcommitted
Fix index out of bounds crash for '@@ @@' hunk header
1 parent 42da5ad commit cb610ec

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

src/handlers/hunk_header.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ lazy_static! {
235235
fn parse_hunk_header(line: &str) -> Option<ParsedHunkHeader> {
236236
if let Some(caps) = HUNK_HEADER_REGEX.captures(line) {
237237
let file_coordinates = &caps[1];
238-
let line_numbers_and_hunk_lengths = HUNK_HEADER_FILE_COORDINATE_REGEX
238+
let line_numbers_and_hunk_lengths: Vec<(usize, usize)> = HUNK_HEADER_FILE_COORDINATE_REGEX
239239
.captures_iter(file_coordinates)
240240
.map(|caps| {
241241
(
@@ -249,11 +249,15 @@ fn parse_hunk_header(line: &str) -> Option<ParsedHunkHeader> {
249249
)
250250
})
251251
.collect();
252-
let code_fragment = caps[2].to_string();
253-
Some(ParsedHunkHeader {
254-
code_fragment,
255-
line_numbers_and_hunk_lengths,
256-
})
252+
if line_numbers_and_hunk_lengths.is_empty() {
253+
None
254+
} else {
255+
let code_fragment = caps[2].to_string();
256+
Some(ParsedHunkHeader {
257+
code_fragment,
258+
line_numbers_and_hunk_lengths,
259+
})
260+
}
257261
} else {
258262
None
259263
}
@@ -456,6 +460,12 @@ pub mod tests {
456460
assert_eq!(line_numbers_and_hunk_lengths[1], (75, 2),);
457461
}
458462

463+
#[test]
464+
fn test_parse_hunk_header_with_no_hunk_lengths() {
465+
let result = parse_hunk_header("@@ @@\n");
466+
assert_eq!(result, None);
467+
}
468+
459469
#[test]
460470
fn test_parse_hunk_header_added_file() {
461471
let ParsedHunkHeader {

0 commit comments

Comments
 (0)