Skip to content
Snippets Groups Projects
Commit c647ef4d authored by catch's avatar catch
Browse files

Issue #2867336 by mbovan, jcnventura, Berdir, hchonov, gabesullice,...

Issue #2867336 by mbovan, jcnventura, Berdir, hchonov, gabesullice, jonathanshaw: File size validator should only respect the explicitly configured maximum file size
parent c22d2af8
No related branches found
No related tags found
36 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3600Issue #3344629: Passing null to parameter #1 ($haystack) of type string is deprecated,!3291Issue #3336463: Rewrite rules for gzipped CSS and JavaScript aggregates never match,!3102Issue #3164428 by DonAtt, longwave, sahil.goyal, Anchal_gupta, alexpott: Use...,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2074Issue #2707689: NodeForm::actions() checks for delete access on new entities,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1254Issue #3238915: Refactor (if feasible) uses of the jQuery ready function to use VanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!873Issue #2875228: Site install not using batch API service,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!712Issue #2909128: Autocomplete intermittent on Chrome Android,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
...@@ -180,7 +180,7 @@ public function fieldSettingsForm(array $form, FormStateInterface $form_state) { ...@@ -180,7 +180,7 @@ public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
'#type' => 'textfield', '#type' => 'textfield',
'#title' => $this->t('Maximum upload size'), '#title' => $this->t('Maximum upload size'),
'#default_value' => $settings['max_filesize'], '#default_value' => $settings['max_filesize'],
'#description' => $this->t('Enter a value like "512" (bytes), "80 KB" (kilobytes) or "50 MB" (megabytes) in order to restrict the allowed file size. If left empty the file sizes will be limited only by PHP\'s maximum post and file upload sizes (current limit <strong>%limit</strong>).', ['%limit' => format_size(Environment::getUploadMaxSize())]), '#description' => $this->t('Enter a value like "512" (bytes), "80 KB" (kilobytes) or "50 MB" (megabytes) in order to restrict the allowed file size. If left empty the file sizes could be limited only by PHP\'s maximum post and file upload sizes (current limit <strong>%limit</strong>).', ['%limit' => format_size(Environment::getUploadMaxSize())]),
'#size' => 10, '#size' => 10,
'#element_validate' => [[static::class, 'validateMaxFilesize']], '#element_validate' => [[static::class, 'validateMaxFilesize']],
'#weight' => 5, '#weight' => 5,
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace Drupal\file\Plugin\Validation\Constraint; namespace Drupal\file\Plugin\Validation\Constraint;
use Drupal\Component\Utility\Bytes;
use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\ConstraintValidator;
...@@ -23,6 +24,17 @@ public function validate($value, Constraint $constraint) { ...@@ -23,6 +24,17 @@ public function validate($value, Constraint $constraint) {
$file = $target->getValue(); $file = $target->getValue();
// Get the validators. // Get the validators.
$validators = $value->getUploadValidators(); $validators = $value->getUploadValidators();
// Always respect the configured maximum file size.
$field_settings = $value->getFieldDefinition()->getSettings();
if (array_key_exists('max_filesize', $field_settings)) {
$validators['file_validate_size'] = [Bytes::toNumber($field_settings['max_filesize'])];
}
else {
// Do not validate the file size if it is not set explicitly.
unset($validators['file_validate_size']);
}
// Checks that a file meets the criteria specified by the validators. // Checks that a file meets the criteria specified by the validators.
if ($errors = file_validate($file, $validators)) { if ($errors = file_validate($file, $validators)) {
foreach ($errors as $error) { foreach ($errors as $error) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment