@ -5,6 +5,7 @@
package upload
package upload
import (
import (
"mime"
"net/http"
"net/http"
"net/url"
"net/url"
"path"
"path"
@ -31,7 +32,6 @@ func (err ErrFileTypeForbidden) Error() string {
return "This file extension or type is not allowed to be uploaded."
return "This file extension or type is not allowed to be uploaded."
}
}
var mimeTypeSuffixRe = regexp . MustCompile ( ` ;.*$ ` )
var wildcardTypeRe = regexp . MustCompile ( ` ^[a-z]+/\*$ ` )
var wildcardTypeRe = regexp . MustCompile ( ` ^[a-z]+/\*$ ` )
// Verify validates whether a file is allowed to be uploaded.
// Verify validates whether a file is allowed to be uploaded.
@ -51,7 +51,11 @@ func Verify(buf []byte, fileName string, allowedTypesStr string) error {
}
}
fullMimeType := http . DetectContentType ( buf )
fullMimeType := http . DetectContentType ( buf )
mimeType := strings . TrimSpace ( mimeTypeSuffixRe . ReplaceAllString ( fullMimeType , "" ) )
mimeType , _ , err := mime . ParseMediaType ( fullMimeType )
if err != nil {
log . Warn ( "Detected attachment type could not be parsed %s" , fullMimeType )
return ErrFileTypeForbidden { Type : fullMimeType }
}
extension := strings . ToLower ( path . Ext ( fileName ) )
extension := strings . ToLower ( path . Ext ( fileName ) )
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Unique_file_type_specifiers
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#Unique_file_type_specifiers