diff --git a/lib/filelib.php b/lib/filelib.php index 870bbaa08a7..90b9eee8b1e 100644 --- a/lib/filelib.php +++ b/lib/filelib.php @@ -848,6 +848,7 @@ function file_save_draft_area_files($draftitemid, $contextid, $component, $filea $newhashes = array(); $filecount = 0; + $context = context::instance_by_id($contextid, MUST_EXIST); foreach ($draftfiles as $file) { if (!$options['subdirs'] && $file->get_filepath() !== '/') { continue; @@ -856,8 +857,11 @@ function file_save_draft_area_files($draftitemid, $contextid, $component, $filea continue; } if (!$file->is_directory()) { - if ($options['maxbytes'] and $options['maxbytes'] < $file->get_filesize()) { - // oversized file - should not get here at all + // Check to see if this file was uploaded by someone who can ignore the file size limits. + $fileusermaxbytes = get_user_max_upload_file_size($context, $options['maxbytes'], 0, 0, $file->get_userid()); + if ($fileusermaxbytes != USER_CAN_IGNORE_FILE_SIZE_LIMITS + && ($options['maxbytes'] and $options['maxbytes'] < $file->get_filesize())) { + // Oversized file. continue; } if ($options['maxfiles'] != -1 and $options['maxfiles'] <= $filecount) {