@@ -37,8 +37,21 @@ public function validate($value, Constraint $constraint)
37
37
if ($ value instanceof UploadedFile && !$ value ->isValid ()) {
38
38
switch ($ value ->getError ()) {
39
39
case UPLOAD_ERR_INI_SIZE :
40
- $ maxSize = UploadedFile::getMaxFilesize ();
41
- $ maxSize = $ constraint ->maxSize ? min ($ maxSize , $ constraint ->maxSize ) : $ maxSize ;
40
+ if ($ constraint ->maxSize ) {
41
+ if (ctype_digit ((string ) $ constraint ->maxSize )) {
42
+ $ maxSize = (int ) $ constraint ->maxSize ;
43
+ } elseif (preg_match ('/^\d++k$/ ' , $ constraint ->maxSize )) {
44
+ $ maxSize = $ constraint ->maxSize * 1024 ;
45
+ } elseif (preg_match ('/^\d++M$/ ' , $ constraint ->maxSize )) {
46
+ $ maxSize = $ constraint ->maxSize * 1048576 ;
47
+ } else {
48
+ throw new ConstraintDefinitionException (sprintf ('"%s" is not a valid maximum size ' , $ constraint ->maxSize ));
49
+ }
50
+ $ maxSize = min (UploadedFile::getMaxFilesize (), $ maxSize );
51
+ } else {
52
+ $ maxSize = UploadedFile::getMaxFilesize ();
53
+ }
54
+
42
55
$ this ->context ->addViolation ($ constraint ->uploadIniSizeErrorMessage , array (
43
56
'{{ limit }} ' => $ maxSize ,
44
57
'{{ suffix }} ' => 'bytes ' ,
@@ -97,15 +110,15 @@ public function validate($value, Constraint $constraint)
97
110
if ($ constraint ->maxSize ) {
98
111
if (ctype_digit ((string ) $ constraint ->maxSize )) {
99
112
$ size = filesize ($ path );
100
- $ limit = $ constraint ->maxSize ;
113
+ $ limit = ( int ) $ constraint ->maxSize ;
101
114
$ suffix = 'bytes ' ;
102
- } elseif (preg_match ('/^( \d+) k$/ ' , $ constraint ->maxSize , $ matches )) {
115
+ } elseif (preg_match ('/^\d++ k$/ ' , $ constraint ->maxSize )) {
103
116
$ size = round (filesize ($ path ) / 1000 , 2 );
104
- $ limit = $ matches [ 1 ] ;
117
+ $ limit = ( int ) $ constraint -> maxSize ;
105
118
$ suffix = 'kB ' ;
106
- } elseif (preg_match ('/^( \d+) M$/ ' , $ constraint ->maxSize , $ matches )) {
119
+ } elseif (preg_match ('/^\d++ M$/ ' , $ constraint ->maxSize )) {
107
120
$ size = round (filesize ($ path ) / 1000000 , 2 );
108
- $ limit = $ matches [ 1 ] ;
121
+ $ limit = ( int ) $ constraint -> maxSize ;
109
122
$ suffix = 'MB ' ;
110
123
} else {
111
124
throw new ConstraintDefinitionException (sprintf ('"%s" is not a valid maximum size ' , $ constraint ->maxSize ));
0 commit comments