fix: reject bare .dz source URLs and make extension validation case-insensitive
A bare .dz file (DictZip without the .dsl prefix) is treated by the pipeline as an orphaned file and deleted right after the download, so a .dz source URL passed validation but silently produced no dictionary. Accept only DictZip-compressed DSL (.dsl.dz; .gz already covers .dsl.gz) and compare extensions case-insensitively.
This commit is contained in:
1 parent
59115ff9a3
commit
1d84eaf9c0
3 files changed
+6
-3
No files matched your search
@@ -102,12 +102,15 @@ data class DictionarySource(
|
||||
|
||||
fun validateTemplate(template: String): ValidationResult {
|
||||
val trimmed = template.trim()
|
||||
val lowerTemplate = trimmed.lowercase()
|
||||
return when {
|
||||
trimmed.isBlank() -> ValidationResult.Error(ValidationError.EMPTY)
|
||||
trimmed.length > 2048 -> ValidationResult.Error(ValidationError.TOO_LONG)
|
||||
!trimmed.startsWith("http://") && !trimmed.startsWith("https://") ->
|
||||
ValidationResult.Error(ValidationError.INVALID_PROTOCOL)
|
||||
!trimmed.endsWith(".gz") && !trimmed.endsWith(".dsl") && !trimmed.endsWith(".dz") ->
|
||||
!lowerTemplate.endsWith(".gz") &&
|
||||
!lowerTemplate.endsWith(".dsl") &&
|
||||
!lowerTemplate.endsWith(".dsl.dz") ->
|
||||
ValidationResult.Error(ValidationError.INVALID_EXTENSION)
|
||||
!isValidUrlStructure(trimmed) ->
|
||||
ValidationResult.Error(ValidationError.INVALID_URL_STRUCTURE)
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
<string name="dictionary_source_duplicate_prefix">Этот словарь уже существует (одинаковый префикс)</string>
|
||||
<string name="dictionary_source_url_empty">URL не может быть пустым</string>
|
||||
<string name="dictionary_source_invalid_protocol">Должен начинаться с http:// или https://</string>
|
||||
<string name="dictionary_source_invalid_extension">Должен заканчиваться на .gz, .dsl или .dz</string>
|
||||
<string name="dictionary_source_invalid_extension">Должен заканчиваться на .gz, .dsl или .dsl.dz</string>
|
||||
<string name="dictionary_source_too_long">URL слишком длинный (максимум 2048 символов)</string>
|
||||
<string name="dictionary_source_invalid_url">Неверный формат URL</string>
|
||||
<string name="dictionary_source_suspicious_characters">URL содержит недопустимые символы</string>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<string name="dictionary_source_duplicate_prefix">This dictionary already exists</string>
|
||||
<string name="dictionary_source_url_empty">URL cannot be empty</string>
|
||||
<string name="dictionary_source_invalid_protocol">Must start with http:// or https://</string>
|
||||
<string name="dictionary_source_invalid_extension">Must end with .gz, .dsl, or .dz</string>
|
||||
<string name="dictionary_source_invalid_extension">Must end with .gz, .dsl, or .dsl.dz</string>
|
||||
<string name="dictionary_source_too_long">URL is too long (max 2048 characters)</string>
|
||||
<string name="dictionary_source_invalid_url">Invalid URL format</string>
|
||||
<string name="dictionary_source_suspicious_characters">URL contains invalid characters</string>
|
||||
|
||||
Reference in new issue
Block a user