diff --git a/src/encode/lzh.c b/src/encode/lzh.c
index 80f1ed35192688159e24716a0fc40ee2be2c944c..8797dc8787f8a341128619925e62af8e4ef9b989 100644
--- a/src/encode/lzh.c
+++ b/src/encode/lzh.c
@@ -450,7 +450,7 @@ static void lzh_update(lzh_t* lzh, short int c)
 
 		/* swap nodes to keep the tree freq-ordered */
 		if (((unsigned)k) > ((unsigned)lzh->freq[l = c + 1])) {
-			while (l < (sizeof(lzh->freq) / sizeof(lzh->freq[0])) && k > lzh->freq[++l]);
+			while (l < (sizeof(lzh->freq) / sizeof(lzh->freq[0]) - 1) && k > lzh->freq[++l]);
 			l--;
 			lzh->freq[c] = lzh->freq[l];
 			lzh->freq[l] = k;