Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c648ab4 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Fix reading uninitialized memory."

parents 362ab36c a000a32c
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ Dictionary::Dictionary(JNIEnv *env, const DictionaryStructureWithBufferPolicy::S
int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession,
        int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints,
        int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint,
        const SuggestOptions *const suggestOptions, int *outWords, int *frequencies,
        const SuggestOptions *const suggestOptions, int *outWords, int *outputScores,
        int *spaceIndices, int *outputTypes, int *outputAutoCommitFirstWordConfidence) const {
    TimeKeeper::setCurrentTime();
    int result = 0;
@@ -55,9 +55,9 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession
                traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
        result = mGestureSuggest.get()->getSuggestions(proximityInfo, traverseSession, xcoordinates,
                ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint, outWords,
                frequencies, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence);
                outputScores, spaceIndices, outputTypes, outputAutoCommitFirstWordConfidence);
        if (DEBUG_DICT) {
            DUMP_RESULT(outWords, frequencies);
            DUMP_RESULT(outWords, outputScores);
        }
        return result;
    } else {
@@ -65,20 +65,20 @@ int Dictionary::getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession
                traverseSession, this, prevWordCodePoints, prevWordLength, suggestOptions);
        result = mTypingSuggest.get()->getSuggestions(proximityInfo, traverseSession, xcoordinates,
                ycoordinates, times, pointerIds, inputCodePoints, inputSize, commitPoint,
                outWords, frequencies, spaceIndices, outputTypes,
                outWords, outputScores, spaceIndices, outputTypes,
                outputAutoCommitFirstWordConfidence);
        if (DEBUG_DICT) {
            DUMP_RESULT(outWords, frequencies);
            DUMP_RESULT(outWords, outputScores);
        }
        return result;
    }
}

int Dictionary::getBigrams(const int *word, int length, int *outWords, int *frequencies,
int Dictionary::getBigrams(const int *word, int length, int *outWords, int *outputScores,
        int *outputTypes) const {
    TimeKeeper::setCurrentTime();
    if (length <= 0) return 0;
    return mBigramDictionary.get()->getPredictions(word, length, outWords, frequencies,
    return mBigramDictionary.get()->getPredictions(word, length, outWords, outputScores,
            outputTypes);
}

+2 −2
Original line number Diff line number Diff line
@@ -64,10 +64,10 @@ class Dictionary {
    int getSuggestions(ProximityInfo *proximityInfo, DicTraverseSession *traverseSession,
            int *xcoordinates, int *ycoordinates, int *times, int *pointerIds, int *inputCodePoints,
            int inputSize, int *prevWordCodePoints, int prevWordLength, int commitPoint,
            const SuggestOptions *const suggestOptions, int *outWords, int *frequencies,
            const SuggestOptions *const suggestOptions, int *outWords, int *outputScores,
            int *spaceIndices, int *outputTypes, int *outputAutoCommitFirstWordConfidence) const;

    int getBigrams(const int *word, int length, int *outWords, int *frequencies,
    int getBigrams(const int *word, int length, int *outWords, int *outputScores,
            int *outputTypes) const;

    int getProbability(const int *word, int length) const;
+10 −10
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
// TODO: Split this method.
/* static */ int SuggestionsOutputUtils::outputSuggestions(
        const Scoring *const scoringPolicy, DicTraverseSession *traverseSession,
        int *frequencies, int *outputCodePoints, int *outputIndicesToPartialCommit,
        int *outputScores, int *outputCodePoints, int *outputIndicesToPartialCommit,
        int *outputTypes, int *outputAutoCommitFirstWordConfidence) {
#if DEBUG_EVALUATE_MOST_PROBABLE_STRING
    const int terminalSize = 0;
@@ -52,7 +52,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
    // Insert most probable word at index == 0 as long as there is one terminal at least
    const bool hasMostProbableString =
            scoringPolicy->getMostProbableString(traverseSession, terminalSize, languageWeight,
                    &outputCodePoints[0], &outputTypes[0], &frequencies[0]);
                    &outputCodePoints[0], &outputTypes[0], &outputScores[0]);
    if (hasMostProbableString) {
        outputIndicesToPartialCommit[outputWordIndex] = NOT_AN_INDEX;
        ++outputWordIndex;
@@ -97,7 +97,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
        const bool isExactMatch =
                ErrorTypeUtils::isExactMatch(terminalDicNode->getContainedErrorTypes());
        const bool isFirstCharUppercase = terminalDicNode->isFirstCharUppercase();
        // Heuristic: We exclude freq=0 first-char-uppercase words from exact match.
        // Heuristic: We exclude probability=0 first-char-uppercase words from exact match.
        // (e.g. "AMD" and "and")
        const bool isSafeExactMatch = isExactMatch
                && !(isPossiblyOffensiveWord && isFirstCharUppercase);
@@ -123,7 +123,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
        // Don't output invalid words. However, we still need to submit their shortcuts if any.
        if (isValidWord) {
            outputTypes[outputWordIndex] = Dictionary::KIND_CORRECTION | outputTypeFlags;
            frequencies[outputWordIndex] = finalScore;
            outputScores[outputWordIndex] = finalScore;
            if (outputSecondWordFirstLetterInputIndex) {
                outputIndicesToPartialCommit[outputWordIndex] =
                        terminalDicNode->getSecondWordFirstInputIndex(
@@ -151,7 +151,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
                             terminalDicNode->getContainedErrorTypes(),
                             true /* forceCommit */, boostExactMatches) : finalScore;
            const int updatedOutputWordIndex = outputShortcuts(&shortcutIt,
                    outputWordIndex, shortcutBaseScore, outputCodePoints, frequencies, outputTypes,
                    outputWordIndex, shortcutBaseScore, outputCodePoints, outputScores, outputTypes,
                    sameAsTyped);
            const int secondWordFirstInputIndex = terminalDicNode->getSecondWordFirstInputIndex(
                    traverseSession->getProximityInfoState(0));
@@ -168,8 +168,8 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
    }

    if (hasMostProbableString) {
        scoringPolicy->safetyNetForMostProbableString(terminalSize, maxScore,
                &outputCodePoints[0], &frequencies[0]);
        scoringPolicy->safetyNetForMostProbableString(outputWordIndex, maxScore,
                &outputCodePoints[0], outputScores);
    }
    return outputWordIndex;
}
@@ -229,7 +229,7 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
/* static */ int SuggestionsOutputUtils::outputShortcuts(
        BinaryDictionaryShortcutIterator *const shortcutIt,
        int outputWordIndex, const int finalScore, int *const outputCodePoints,
        int *const frequencies, int *const outputTypes, const bool sameAsTyped) {
        int *const outputScores, int *const outputTypes, const bool sameAsTyped) {
    int shortcutTarget[MAX_WORD_LENGTH];
    while (shortcutIt->hasNextShortcutTarget() && outputWordIndex < MAX_RESULTS) {
        bool isWhilelist;
@@ -249,8 +249,8 @@ const int SuggestionsOutputUtils::MIN_LEN_FOR_MULTI_WORD_AUTOCORRECT = 16;
            kind = Dictionary::KIND_SHORTCUT;
        }
        outputTypes[outputWordIndex] = kind;
        frequencies[outputWordIndex] = shortcutScore;
        frequencies[outputWordIndex] = max(S_INT_MIN + 1, shortcutScore) - 1;
        outputScores[outputWordIndex] = shortcutScore;
        outputScores[outputWordIndex] = max(S_INT_MIN + 1, shortcutScore) - 1;
        const int startIndex2 = outputWordIndex * MAX_WORD_LENGTH;
        DicNodeUtils::appendTwoWords(0, 0, shortcutTarget, shortcutTargetStringLength,
                &outputCodePoints[startIndex2]);
+2 −2
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ class SuggestionsOutputUtils {
     * Outputs the final list of suggestions (i.e., terminal nodes).
     */
    static int outputSuggestions(const Scoring *const scoringPolicy,
            DicTraverseSession *traverseSession, int *frequencies, int *outputCodePoints,
            DicTraverseSession *traverseSession, int *outputScores, int *outputCodePoints,
            int *outputIndicesToPartialCommit, int *outputTypes,
            int *outputAutoCommitFirstWordConfidence);

@@ -46,7 +46,7 @@ class SuggestionsOutputUtils {

    static int outputShortcuts(BinaryDictionaryShortcutIterator *const shortcutIt,
            int outputWordIndex, const int finalScore, int *const outputCodePoints,
            int *const frequencies, int *const outputTypes, const bool sameAsTyped);
            int *const outputScores, int *const outputTypes, const bool sameAsTyped);
};
} // namespace latinime
#endif // LATINIME_SUGGESTIONS_OUTPUT_UTILS
+2 −2
Original line number Diff line number Diff line
@@ -33,8 +33,8 @@ class Scoring {
    virtual bool getMostProbableString(const DicTraverseSession *const traverseSession,
            const int terminalSize, const float languageWeight, int *const outputCodePoints,
            int *const type, int *const freq) const = 0;
    virtual void safetyNetForMostProbableString(const int terminalSize,
            const int maxScore, int *const outputCodePoints, int *const frequencies) const = 0;
    virtual void safetyNetForMostProbableString(const int scoreCount,
            const int maxScore, int *const outputCodePoints, int *const scores) const = 0;
    virtual float getAdjustedLanguageWeight(DicTraverseSession *const traverseSession,
            DicNode *const terminals, const int size) const = 0;
    virtual float getDoubleLetterDemotionDistanceCost(
Loading