Index: includes/file.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/file.inc,v
retrieving revision 1.146
diff -u -p -r1.146 file.inc
--- includes/file.inc	4 Dec 2008 11:09:33 -0000	1.146
+++ includes/file.inc	11 Dec 2008 14:07:23 -0000
@@ -260,7 +260,7 @@ function file_check_location($source, $d
     $source = realpath(dirname($source)) . '/' . basename($source);
   }
   $directory = realpath($directory);
-  if ($directory && strpos($source, $directory) !== 0) {
+  if (!is_dir($directory) || strpos($source, $directory) !== 0) {
     return FALSE;
   }
   return $source;
Index: modules/simpletest/tests/file.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/file.test,v
retrieving revision 1.14
diff -u -p -r1.14 file.test
--- modules/simpletest/tests/file.test	27 Nov 2008 08:41:45 -0000	1.14
+++ modules/simpletest/tests/file.test	11 Dec 2008 14:07:26 -0000
@@ -450,7 +450,12 @@ class FileDirectoryTest extends FileTest
     $source = 'fake/xyz.txt';
     $directory = 'fake';
     $result = file_check_location($source, $directory);
-    $this->assertTrue($result, t('Non-existent file validates when checked for location in non-existing directory.'), 'File');
+    $this->assertFalse($result, t('Non-existent file doesn\'t validate when checked for location in non-existing directory.'), 'File');
+
+    $source = 'misc/fake/xyz.txt';
+    $directory = 'misc';
+    $result = file_check_location($source, $directory);
+    $this->assertFalse($result, t("Non-existent file doesn\'t validate when checked for location in directory, but name contains a non-existent subfolder."), 'File');
 
     $source = 'misc/../install.php';
     $directory = 'misc';
