aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeisuke Kuroynagi <ksk@google.com>2013-07-23 13:13:12 +0900
committerKeisuke Kuroynagi <ksk@google.com>2013-07-23 13:13:12 +0900
commit5b7688bbb5ed01b534570e86a91ae1c724e23100 (patch)
treecf1a416ac72f740db5857c6bf714fd0d64c6db0c
parenta54b8b3f5d40b5b657ceafe5a0c9639c7812c28c (diff)
downloadlatinime-5b7688bbb5ed01b534570e86a91ae1c724e23100.tar.gz
latinime-5b7688bbb5ed01b534570e86a91ae1c724e23100.tar.xz
latinime-5b7688bbb5ed01b534570e86a91ae1c724e23100.zip
Fix: native crash while iterating bigramslist.
Bug: 9964153 Change-Id: Ia2eb922b61300a7c0e34122cd6c18358f1ee7ba9
-rw-r--r--native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp14
-rw-r--r--native/jni/src/suggest/core/dictionary/multi_bigram_map.h8
2 files changed, 11 insertions, 11 deletions
diff --git a/native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp b/native/jni/src/suggest/core/dictionary/bigram_dictionary.cpp
index 618a9d2d5..09eecd348 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 BigramDictionary::getPredictions(const int *prevWord, int prevWordLength, in
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 @@ int BigramDictionary::getPredictions(const int *prevWord, int prevWordLength, in
}
// 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 @@ bool BigramDictionary::isValidBigram(const int *word0, int length0, const int *w
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 12f1d08b9..d5eafe1bf 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 @@ class MultiBigramMap {
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 @@ class MultiBigramMap {
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(