diff --git a/native/src/correction.cpp b/native/src/correction.cpp
index ce4a869f01801158848df43231d16e0d1d9f0fbd..5a0e608b86417fa4c7231ad4d153837a79eb465e 100644
--- a/native/src/correction.cpp
+++ b/native/src/correction.cpp
@@ -490,7 +490,7 @@ inline static int editDistance(
             const uint16_t cost = (ci == co) ? 0 : 1;
             dp[(i + 1) * lo + (j + 1)] = min(dp[i * lo + (j + 1)] + 1,
                     min(dp[(i + 1) * lo + j] + 1, dp[i * lo + j] + cost));
-            if (ci == Dictionary::toBaseLowerCase(output[j - 1])
+            if (i > 0 && j > 0 && ci == Dictionary::toBaseLowerCase(output[j - 1])
                     && co == Dictionary::toBaseLowerCase(input[i - 1])) {
                 dp[(i + 1) * lo + (j + 1)] = min(
                         dp[(i + 1) * lo + (j + 1)], dp[(i - 1) * lo + (j - 1)] + cost);