diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index e05136d0..4074534b 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -467,16 +467,14 @@ impl EditorView {
 
             let starting_indent =
                 (offset.col / tab_width) + config.indent_guides.skip_levels as usize;
-            // TODO: limit to a max indent level too. It doesn't cause visual artifacts but it would avoid some
-            // extra loops if the code is deeply nested.
 
             for i in starting_indent..(indent_level / tab_width) {
-                surface.set_string(
-                    (viewport.x as usize + (i * tab_width) - offset.col) as u16,
-                    viewport.y + line,
-                    &indent_guide_char,
-                    indent_guide_style,
-                );
+                let x = (viewport.x as usize + (i * tab_width) - offset.col) as u16;
+                let y = viewport.y + line;
+                if !surface.in_bounds(x, y) {
+                    break;
+                }
+                surface.set_string(x, y, &indent_guide_char, indent_guide_style);
             }
         };