Add a number of NULL pointer guards.

None of these are expected to actually be null, but those are
included for peace of mind and foolproofing against future
code changes.

Bug: 4580040
Change-Id: Ib112b3e5db5f177aaf61767164b7e78d711f90a0
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 7ce9292..bce787d 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -91,7 +91,9 @@
                 Log.e(TAG, "Unable to read source data for locale "
                         + locale.toString() + ": falling back to internal dictionary");
             }
-            return Arrays.asList(loadFallbackResource(context, fallbackResId));
+            final AssetFileAddress fallbackAsset = loadFallbackResource(context, fallbackResId);
+            if (null == fallbackAsset) return null;
+            return Arrays.asList(fallbackAsset);
         }
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
index 5e7de3e..e987d9f 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
@@ -32,7 +32,11 @@
     }
 
     public DictionaryCollection(Dictionary... dictionaries) {
-        mDictionaries = new CopyOnWriteArrayList<Dictionary>(dictionaries);
+        if (null == dictionaries) {
+            mDictionaries = new CopyOnWriteArrayList<Dictionary>();
+        } else {
+            mDictionaries = new CopyOnWriteArrayList<Dictionary>(dictionaries);
+        }
     }
 
     public DictionaryCollection(Collection<Dictionary> dictionaries) {
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFactory.java b/java/src/com/android/inputmethod/latin/DictionaryFactory.java
index bba3318..a35b0f5 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFactory.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFactory.java
@@ -52,13 +52,23 @@
         }
 
         final List<Dictionary> dictList = new LinkedList<Dictionary>();
-        for (final AssetFileAddress f : BinaryDictionaryGetter.getDictionaryFiles(locale,
-                context, fallbackResId)) {
-            dictList.add(new BinaryDictionary(context, f.mFilename, f.mOffset, f.mLength, null));
+        final List<AssetFileAddress> assetFileList =
+                BinaryDictionaryGetter.getDictionaryFiles(locale, context, fallbackResId);
+        if (null != assetFileList) {
+            for (final AssetFileAddress f : assetFileList) {
+                dictList.add(
+                        new BinaryDictionary(context, f.mFilename, f.mOffset, f.mLength, null));
+            }
         }
 
-        if (null == dictList) return null;
-        return new DictionaryCollection(dictList);
+        // null == dictList is not supposed to be possible, but better safe than sorry and it's
+        // safer for future extension. In this case, rather than returning null, it should be safer
+        // to return an empty DictionaryCollection.
+        if (null == dictList) {
+            return new DictionaryCollection();
+        } else {
+            return new DictionaryCollection(dictList);
+        }
     }
 
     /**