Index: src/wp-admin/includes/file.php
===================================================================
--- src/wp-admin/includes/file.php	(revision 41234)
+++ src/wp-admin/includes/file.php	(working copy)
@@ -129,6 +129,8 @@
 	if ( empty($folder) )
 		return false;
 
+	$folder = untrailingslashit( $folder );
+
 	if ( ! $levels )
 		return false;
 
Index: tests/phpunit/tests/file.php
===================================================================
--- tests/phpunit/tests/file.php	(revision 41234)
+++ tests/phpunit/tests/file.php	(working copy)
@@ -155,6 +155,34 @@
 		unlink($this->dir . DIRECTORY_SEPARATOR . $filename);
 	}
 
+	function test_list_files() {
+		$directory = '/tmp' . DIRECTORY_SEPARATOR . 'testdir';
+
+		$files = array(
+			$directory . DIRECTORY_SEPARATOR . 'test_1.txt',
+			$directory . DIRECTORY_SEPARATOR . 'test_2.txt',
+			$directory . DIRECTORY_SEPARATOR . 'test_3.txt',
+		);
+
+		wp_mkdir_p( $directory );
+		foreach ( $files as $file ) {
+			file_put_contents( $file, 'hi' );
+		}
+
+		$listed_files = list_files( $directory );
+		sort( $listed_files );
+
+		$this->assertEquals( $files, $listed_files );
+
+		// Test also for https://core.trac.wordpress.org/ticket/41318
+		$listed_files = list_files( trailingslashit( $directory ) );
+		sort( $listed_files );
+
+		$this->assertEquals( $files, $listed_files );
+
+		$this->rmdir( $directory );
+	}
+
 	/**
 	 * @dataProvider data_wp_tempnam_filenames
 	 */
