Merge "Fix: native crash while iterating bigramslist."
diff --git a/native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp b/native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp
index 618a9d2..09eecd3 100644
--- a/native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp
+++ b/native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp
@@ -120,8 +120,8 @@
     int bigramCount = 0;
     int unigramProbability = 0;
     int bigramBuffer[MAX_WORD_LENGTH];
-    for (BinaryDictionaryBigramsIterator bigramsIt(mBinaryDictionaryInfo, pos);
-            bigramsIt.hasNext(); /* no-op */) {
+    BinaryDictionaryBigramsIterator bigramsIt(mBinaryDictionaryInfo, pos);
+    while (bigramsIt.hasNext()) {
         bigramsIt.next();
         const int length = mBinaryDictionaryInfo->getStructurePolicy()->
                 getCodePointsAndProbabilityAndReturnCodePointCount(
@@ -147,13 +147,13 @@
 }
 
 // Returns a pointer to the start of the bigram list.
-// If the word is not found or has no bigrams, this function returns 0.
+// If the word is not found or has no bigrams, this function returns NOT_A_DICT_POS.
 int BigramDictionary::getBigramListPositionForWord(const int *prevWord, const int prevWordLength,
         const bool forceLowerCaseSearch) const {
-    if (0 >= prevWordLength) return 0;
+    if (0 >= prevWordLength) return NOT_A_DICT_POS;
     int pos = mBinaryDictionaryInfo->getStructurePolicy()->getTerminalNodePositionOfWord(
             mBinaryDictionaryInfo, prevWord, prevWordLength, forceLowerCaseSearch);
-    if (NOT_A_VALID_WORD_POS == pos) return 0;
+    if (NOT_A_VALID_WORD_POS == pos) return NOT_A_DICT_POS;
     return mBinaryDictionaryInfo->getStructurePolicy()->getBigramsPositionOfNode(
             mBinaryDictionaryInfo, pos);
 }
@@ -183,8 +183,8 @@
             mBinaryDictionaryInfo, word1, length1, false /* forceLowerCaseSearch */);
     if (NOT_A_VALID_WORD_POS == nextWordPos) return false;
 
-    for (BinaryDictionaryBigramsIterator bigramsIt(mBinaryDictionaryInfo, pos);
-            bigramsIt.hasNext(); /* no-op */) {
+    BinaryDictionaryBigramsIterator bigramsIt(mBinaryDictionaryInfo, pos);
+    while (bigramsIt.hasNext()) {
         bigramsIt.next();
         if (bigramsIt.getBigramPos() == nextWordPos) {
             return true;
diff --git a/native/jni/src/suggest/core/dictionary/multi_bigram_map.h b/native/jni/src/suggest/core/dictionary/multi_bigram_map.h
index 12f1d08..d5eafe1 100644
--- a/native/jni/src/suggest/core/dictionary/multi_bigram_map.h
+++ b/native/jni/src/suggest/core/dictionary/multi_bigram_map.h
@@ -69,8 +69,8 @@
         void init(const BinaryDictionaryInfo *const binaryDictionaryInfo, const int nodePos) {
             const int bigramsListPos = binaryDictionaryInfo->getStructurePolicy()->
                     getBigramsPositionOfNode(binaryDictionaryInfo, nodePos);
-            for (BinaryDictionaryBigramsIterator bigramsIt(binaryDictionaryInfo, bigramsListPos);
-                    bigramsIt.hasNext(); /* no-op */) {
+            BinaryDictionaryBigramsIterator bigramsIt(binaryDictionaryInfo, bigramsListPos);
+            while (bigramsIt.hasNext()) {
                 bigramsIt.next();
                 mBigramMap[bigramsIt.getBigramPos()] = bigramsIt.getProbability();
                 mBloomFilter.setInFilter(bigramsIt.getBigramPos());
@@ -109,8 +109,8 @@
             const int nextWordPosition, const int unigramProbability) {
         const int bigramsListPos = binaryDictionaryInfo->getStructurePolicy()->
                 getBigramsPositionOfNode(binaryDictionaryInfo, nodePos);
-        for (BinaryDictionaryBigramsIterator bigramsIt(binaryDictionaryInfo, bigramsListPos);
-                bigramsIt.hasNext(); /* no-op */) {
+        BinaryDictionaryBigramsIterator bigramsIt(binaryDictionaryInfo, bigramsListPos);
+        while (bigramsIt.hasNext()) {
             bigramsIt.next();
             if (bigramsIt.getBigramPos() == nextWordPosition) {
                 return ProbabilityUtils::computeProbabilityForBigram(