Repository: gitui-org/gitui (language: rust)

Issue:
Index out of bounds error in `src/popups/blame_file.rs, line: 622, col: 38`
**Describe the bug**
An index out of bounds error occurs when navigating specific file and then blaming it by pressing `shift` + `B`.

**Steps To Reproduce**
Steps to reproduce the behavior:
1. Clone `https://codeberg.org/BrunoWallner/apoxel`
2. Go to commit ID: `312629cb98556f883533fe65faea2387eff2e8ff` (`git checkout 312629cb98556f883533fe65faea2387eff2e8ff`)
3. Run gitui inside the cloned repo
4. Press `tab` to go to "Files" header and navigate to `apoxel/path/shader/stage_1/chunks.wgsl`
5. press `shift` + `B` keys

**Expected behavior**
The Blame page should appear but instead the application crashes.

**Error output**
```
PanicInfo { payload: Any { .. }, message: Some(index out of bounds: the len is 339 but the index is 339), location: Location { file: "src/popups/blame_file.rs", line: 622, col: 38 }, can_unwind: true, force_no_backtrace: false }
trace:

```

**Context**
 - OS: Linux archlinux 6.7.8-arch1-1 #1 SMP PREEMPT_DYNAMIC Sun, 03 Mar 2024 00:30:36 +0000 x86_64 GNU/Linux
 - Gitui version: gitui 0.25.1 installed via pacman
 - Rust version: rustc 1.78.0-nightly (9c3ad802d 2024-03-07) (should not matter)



Discussion / hints:
ok this is a regression introduced by af9da95 by @tdtrung17693.

@tdtrung17693 can you look into this?
relevant backtrace:

```
PanicInfo { payload: Any { .. }, message: Some(index out of bounds: the len is 339 but the index is 339), location: Location { file: "src/components/blame_file.rs", line: 619, col: 38 }, can_unwind: true, force_no_backtrace: false }
trace:
  13: gitui::components::blame_file::BlameFileComponent::get_line_blame::{{closure}}
             at src/components/blame_file.rs:619:23
  15: gitui::components::blame_file::BlameFileComponent::get_line_blame
             at src/components/blame_file.rs:612:19
  16: gitui::components::blame_file::BlameFileComponent::get_rows::{{closure}}::{{closure}}
             at src/components/blame_file.rs:541:7
  29: gitui::components::blame_file::BlameFileComponent::get_rows::{{closure}}
             at src/components/blame_file.rs:536:5
  31: gitui::components::blame_file::BlameFileComponent::get_rows
             at src/components/blame_file.rs:530:3
  32: <gitui::components::blame_file::BlameFileComponent as gitui::components::DrawableComponent>::draw
             at src/components/blame_file.rs:111:15
  33: gitui::app::App::draw_popups
             at src/components/mod.rs:133:16
  34: gitui::app::App::draw
             at src/app.rs:272:3
```
> ok this is a regression introduced by af9da95 by @tdtrung17693.
> 
> @tdtrung17693 can you look into this?

Ok. Let me take a look at it.

Fix patch:
diff --git a/src/popups/blame_file.rs b/src/popups/blame_file.rs
index 65c7c2028c..af2fdb90e1 100644
--- a/src/popups/blame_file.rs
+++ b/src/popups/blame_file.rs
@@ -572,7 +572,8 @@ impl BlameFilePopup {
 			.iter()
 			.map(|l| l.1.clone())
 			.collect::<Vec<_>>();
-		let text = tabs_to_spaces(raw_lines.join("\n"));
+		let mut text = tabs_to_spaces(raw_lines.join("\n"));
+		text.push('\n');
 
 		job.spawn(AsyncSyntaxJob::new(
 			text,


Test patch: