diff --git a/aegisub/src/ass_karaoke.cpp b/aegisub/src/ass_karaoke.cpp
index fe6849edc8de892769f1e650eab66acd992e698c..4bf6c4447113668406d839d8515307d9b7fe6f17 100644
--- a/aegisub/src/ass_karaoke.cpp
+++ b/aegisub/src/ass_karaoke.cpp
@@ -151,9 +151,9 @@ void AssKaraoke::SetLine(AssDialogue *line, bool auto_split, bool normalize) {
 				syls[i].start_time = start_time + scale_factor * (syls[i].start_time - start_time);
 			}
 
-			for (int i = size() - 1; i > 0; --i) {
-				syls[i].duration = end_time - syls[i].start_time;
-				end_time = syls[i].start_time;
+			for (int i = size(); i > 0; --i) {
+				syls[i - 1].duration = end_time - syls[i - 1].start_time;
+				end_time = syls[i - 1].start_time;
 			}
 		}
 	}