Bugfix - Enforce URL length check in LinkMetadata before attempting to insert to database (#29589)
* Add missing URL length validation in LinkMetadata * Added MaxURLLength constant * Add test to validate new URL length limit * Add comment about table constraint * Use a seperate error string for URL length errors * Added error string fpr URL length * Updated error message * Update en.json * Fixed gofmt error in link_metadata.go * use right txn id ```release-note NONE ``` --------- Co-authored-by: Agniva De Sarker <agnivade@yahoo.co.in> Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
e6b4764e0d
Коммит
baf9bf82c9
@@ -9520,6 +9520,10 @@
|
||||
"id": "model.link_metadata.is_valid.url.app_error",
|
||||
"translation": "Link metadata URL must be set."
|
||||
},
|
||||
{
|
||||
"id": "model.link_metadata.is_valid.url_length.app_error",
|
||||
"translation": "Length of link metadata URL is {{ .Length }} characters long, which exceeds the maximum limit of {{ .MaxLength }} characters."
|
||||
},
|
||||
{
|
||||
"id": "model.member.is_valid.channel.app_error",
|
||||
"translation": "Channel name is not valid"
|
||||
|
||||
@@ -21,6 +21,7 @@ const (
|
||||
LinkMetadataTypeNone LinkMetadataType = "none"
|
||||
LinkMetadataTypeOpengraph LinkMetadataType = "opengraph"
|
||||
LinkMetadataMaxImages int = 5
|
||||
LinkMetadataMaxURLLength int = 2048 // Maximum URL length in LinkMetadata table
|
||||
)
|
||||
|
||||
type LinkMetadataType string
|
||||
@@ -93,6 +94,10 @@ func (o *LinkMetadata) IsValid() *AppError {
|
||||
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.url.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if len(o.URL) > LinkMetadataMaxURLLength {
|
||||
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.url_length.app_error", map[string]any{"MaxLength": LinkMetadataMaxURLLength, "Length": len(o.URL)}, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if o.Timestamp == 0 || !isRoundedToNearestHour(o.Timestamp) {
|
||||
return NewAppError("LinkMetadata.IsValid", "model.link_metadata.is_valid.timestamp.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
@@ -146,6 +146,16 @@ func TestLinkMetadataIsValid(t *testing.T) {
|
||||
},
|
||||
Expected: false,
|
||||
},
|
||||
{
|
||||
Name: "should be invalid because of URL length being too long",
|
||||
Metadata: &LinkMetadata{
|
||||
URL: "http://example.com/?" + strings.Repeat("a", 2048),
|
||||
Timestamp: 1546300800000,
|
||||
Type: LinkMetadataTypeImage,
|
||||
Data: &PostImage{},
|
||||
},
|
||||
Expected: false,
|
||||
},
|
||||
} {
|
||||
t.Run(test.Name, func(t *testing.T) {
|
||||
appErr := test.Metadata.IsValid()
|
||||
|
||||
Ссылка в новой задаче
Block a user