diff --git a/native/src/correction.cpp b/native/src/correction.cpp index 5a0e608b8..d5bfed017 100644 --- a/native/src/correction.cpp +++ b/native/src/correction.cpp @@ -429,6 +429,9 @@ inline static void multiplyIntCapped(const int multiplier, int *base) { if (multiplier == 2) { *base = TWO_31ST_DIV_2 >= temp ? temp << 1 : S_INT_MAX; } else { + // TODO: This overflow check gives a wrong answer when, for example, + // temp = 2^16 + 1 and multiplier = 2^17 + 1. + // Fix this behavior. const int tempRetval = temp * multiplier; *base = tempRetval >= temp ? tempRetval : S_INT_MAX; } diff --git a/native/src/unigram_dictionary.cpp b/native/src/unigram_dictionary.cpp index 4e671a1c4..517dc843e 100644 --- a/native/src/unigram_dictionary.cpp +++ b/native/src/unigram_dictionary.cpp @@ -348,20 +348,6 @@ void UnigramDictionary::getSuggestionCandidates() { } } -static const int TWO_31ST_DIV_2 = S_INT_MAX / 2; -inline static void multiplyIntCapped(const int multiplier, int *base) { - const int temp = *base; - if (temp != S_INT_MAX) { - // Branch if multiplier == 2 for the optimization - if (multiplier == 2) { - *base = TWO_31ST_DIV_2 >= temp ? temp << 1 : S_INT_MAX; - } else { - const int tempRetval = temp * multiplier; - *base = tempRetval >= temp ? tempRetval : S_INT_MAX; - } - } -} - void UnigramDictionary::getMissingSpaceWords( const int inputLength, const int missingSpacePos, Correction *correction) { correction->setCorrectionParams(-1 /* skipPos */, -1 /* excessivePos */,