am d5a3c593: Remove a broken dictionary file when fail to read a dictionary file.

* commit 'd5a3c593dba3475f5e72b1fbe53cee5ed17a7529':
  Remove a broken dictionary file when fail to read a dictionary file.
main
Yuichiro Hanada 2013-08-26 02:12:19 -07:00 committed by Android Git Automerger
commit bfb4c3aa7f
2 changed files with 19 additions and 3 deletions

View File

@ -561,8 +561,7 @@ public final class BinaryDictDecoderUtils {
*/ */
@UsedForTesting @UsedForTesting
/* package */ static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder, /* package */ static FusionDictionary readDictionaryBinary(final Ver3DictDecoder dictDecoder,
final FusionDictionary dict) throws FileNotFoundException, IOException, final FusionDictionary dict) throws IOException, UnsupportedFormatException {
UnsupportedFormatException {
// Read header // Read header
final FileHeader fileHeader = dictDecoder.readHeader(); final FileHeader fileHeader = dictDecoder.readHeader();

View File

@ -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.makedict.FusionDictionary.WeightedString;
import com.android.inputmethod.latin.utils.JniUtils; import com.android.inputmethod.latin.utils.JniUtils;
import android.util.Log;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
@ -38,6 +40,7 @@ import java.util.TreeMap;
*/ */
@UsedForTesting @UsedForTesting
public class Ver3DictDecoder implements DictDecoder { public class Ver3DictDecoder implements DictDecoder {
private static final String TAG = Ver3DictDecoder.class.getSimpleName();
static { static {
JniUtils.loadNativeLibrary(); JniUtils.loadNativeLibrary();
@ -308,7 +311,21 @@ public class Ver3DictDecoder implements DictDecoder {
if (mDictBuffer == null) { if (mDictBuffer == null) {
openDictBuffer(); 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 @Override