From ee396df162b31cff9763dd10a7da2b47aef10c01 Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Tue, 17 Apr 2012 16:02:35 +0900
Subject: [PATCH] Fix a native crash

This was introduced by Ieb2e306a which failed to keep the return
behavior in case the word doesn't have a bigram.

Change-Id: I6d2f0b79d41c4335e94696690c8331e314961133
---
 native/jni/src/bigram_dictionary.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/native/jni/src/bigram_dictionary.cpp b/native/jni/src/bigram_dictionary.cpp
index 87ca1e9edc..ab739e1447 100644
--- a/native/jni/src/bigram_dictionary.cpp
+++ b/native/jni/src/bigram_dictionary.cpp
@@ -109,6 +109,8 @@ int BigramDictionary::getBigrams(unsigned short *prevWord, int prevWordLength, i
 
     const uint8_t* const root = DICT;
     int pos = getBigramListForWord(root, prevWord, prevWordLength);
+    // getBigramListForWord returns 0 if this word is not in the dictionary or has no bigrams
+    if (0 == pos) return 0;
     int bigramFlags;
     int bigramCount = 0;
     do {
@@ -130,6 +132,8 @@ int BigramDictionary::getBigrams(unsigned short *prevWord, int prevWordLength, i
     return bigramCount;
 }
 
+// Returns a pointer to the start of the bigram list.
+// If the word is not found or has no bigrams, this function returns 0.
 int BigramDictionary::getBigramListForWord(const uint8_t* const root,
         const unsigned short *prevWord, const int prevWordLength) {
     int pos = BinaryFormat::getTerminalPosition(root, prevWord, prevWordLength);
-- 
GitLab