From d5a3c593dba3475f5e72b1fbe53cee5ed17a7529 Mon Sep 17 00:00:00 2001 From: Yuichiro Hanada Date: Fri, 23 Aug 2013 17:10:57 +0900 Subject: [PATCH] Remove a broken dictionary file when fail to read a dictionary file. Bug: 10434720 Change-Id: Ibdf05a39113538546b8fcf9d59af7dddf7ca27fc --- .../makedict/BinaryDictDecoderUtils.java | 3 +-- .../latin/makedict/Ver3DictDecoder.java | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java index 29f114662..ceb8fa81f 100644 --- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java +++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderUtils.java @@ -561,8 +561,7 @@ public final class BinaryDictDecoderUtils { */ @UsedForTesting /* package */ static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder, - final FusionDictionary dict) throws FileNotFoundException, IOException, - UnsupportedFormatException { + final FusionDictionary dict) throws IOException, UnsupportedFormatException { // Read header final FileHeader fileHeader = dictDecoder.readHeader(); diff --git a/java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java b/java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java index 1fff9b49e..1a5023ef6 100644 --- a/java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java +++ b/java/src/com/android/inputmethod/latin/makedict/Ver3DictDecoder.java @@ -25,6 +25,8 @@ import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode; import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString; import com.android.inputmethod.latin.utils.JniUtils; +import android.util.Log; + import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -38,6 +40,7 @@ import java.util.TreeMap; */ @UsedForTesting public class Ver3DictDecoder implements DictDecoder { + private static final String TAG = Ver3DictDecoder.class.getSimpleName(); static { JniUtils.loadNativeLibrary(); @@ -308,7 +311,21 @@ public class Ver3DictDecoder implements DictDecoder { if (mDictBuffer == null) { openDictBuffer(); } - return BinaryDictDecoderUtils.readDictionaryBinary(this, dict); + try { + return BinaryDictDecoderUtils.readDictionaryBinary(this, dict); + } catch (IOException e) { + Log.e(TAG, "The dictionary " + mDictionaryBinaryFile.getName() + " is broken.", e); + if (!mDictionaryBinaryFile.delete()) { + Log.e(TAG, "Failed to delete the broken dictionary."); + } + throw e; + } catch (UnsupportedFormatException e) { + Log.e(TAG, "The dictionary " + mDictionaryBinaryFile.getName() + " is broken.", e); + if (!mDictionaryBinaryFile.delete()) { + Log.e(TAG, "Failed to delete the broken dictionary."); + } + throw e; + } } @Override