diff --git a/includes/file.inc b/includes/file.inc
index 0736f8b..35941bc 100644
--- a/includes/file.inc
+++ b/includes/file.inc
@@ -1052,9 +1052,15 @@ function file_upload_max_size() {
   static $max_size = -1;
 
   if ($max_size < 0) {
+    // Start with post_max_size.
+    $max_size = parse_size(ini_get('post_max_size'));
+
+    // If upload_max_size is less, then reduce. Except if upload_max_size is
+    // zero, which indicates no limit.
     $upload_max = parse_size(ini_get('upload_max_filesize'));
-    $post_max = parse_size(ini_get('post_max_size'));
-    $max_size = ($upload_max < $post_max) ? $upload_max : $post_max;
+    if ($upload_max > 0 && $upload_max < $max_size) {
+      $max_size = $upload_max;
+    }
   }
   return $max_size;
 }
