Merge "Snap for 6373446 from e48cdc49d1ab5e26ac07138f0db7b685d8e41c84 to android10-tests-release" into android10-tests-release
diff --git a/src/com/android/tradefed/device/contentprovider/ContentProviderHandler.java b/src/com/android/tradefed/device/contentprovider/ContentProviderHandler.java
index b6babf9..33420fc 100644
--- a/src/com/android/tradefed/device/contentprovider/ContentProviderHandler.java
+++ b/src/com/android/tradefed/device/contentprovider/ContentProviderHandler.java
@@ -312,12 +312,17 @@
             return true;
         }
 
+        CLog.d("Received from content provider:\n%s", listCommandResult);
         String[] listResult = listCommandResult.split("[\\r\\n]+");
 
         for (String row : listResult) {
             HashMap<String, String> columnValues = parseQueryResultRow(row);
             boolean isDirectory = Boolean.valueOf(columnValues.get(COLUMN_DIRECTORY));
             String name = columnValues.get(COLUMN_NAME);
+            if (name == null) {
+                CLog.w("Output from the content provider doesn't seem well formatted:\n%s", row);
+                return false;
+            }
             String path = columnValues.get(COLUMN_ABSOLUTE_PATH);
 
             File localChild = new File(localDir, name);
diff --git a/tests/src/com/android/tradefed/device/contentprovider/ContentProviderHandlerTest.java b/tests/src/com/android/tradefed/device/contentprovider/ContentProviderHandlerTest.java
index 88b0d45..1ab0c71 100644
--- a/tests/src/com/android/tradefed/device/contentprovider/ContentProviderHandlerTest.java
+++ b/tests/src/com/android/tradefed/device/contentprovider/ContentProviderHandlerTest.java
@@ -239,6 +239,19 @@
         }
     }
 
+    @Test
+    public void testPullDir_failedDevice() throws Exception {
+        File pullTo = FileUtil.createTempDir("content-provider-test");
+
+        doReturn("Something crashed").when(mMockDevice).executeShellCommand(anyString());
+
+        try {
+            assertFalse(mProvider.pullDir("path/somewhere", pullTo));
+        } finally {
+            FileUtil.recursiveDelete(pullTo);
+        }
+    }
+
     /**
      * Test {@link ContentProviderHandler#pullDir(String, File)} to pull a directory that contains
      * one text file.