diff --git a/glass.asm b/glass.asm
index f94e546..1371dc7 100644
--- a/glass.asm
+++ b/glass.asm
@@ -11611,12 +11611,16 @@ selection_extract:
 .se_row_grid_shifted:
     mov rax, r12
     sub rax, [scroll_offset]
+    cmp rax, MAX_ROWS           ; guard: shifted row must be in [0, MAX_ROWS)
+    jge .se_done
     imul rax, MAX_COLS
     imul rax, CELL_SIZE
     lea rbx, [grid + rax]
     jmp .se_row_base_done
 .se_row_live:
     mov rax, r12
+    cmp rax, MAX_ROWS           ; guard: row must be in [0, MAX_ROWS)
+    jge .se_done
     imul rax, MAX_COLS
     imul rax, CELL_SIZE
     lea rbx, [grid + rax]
