/
githubmirror
/
photoprism
Обзор
Документация
Войти
/
githubmirror
/
photoprism
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
pkg/clean/state.go
54 строки
1 KB
Michael Mayer
Backend: Clip over-length input in clean.Name and clean.State #5584
18 май 2026, 18:33
18 май 2026, 18:33
10592bf
Код
Авторство
О чём код?
package clean import ( "strings" "unicode" "github.com/photoprism/photoprism/pkg/txt" ) // State returns the normalized state name clipped to at most txt.ClipName // runes; injection patterns (`${`, `ldap://`) drop the value entirely. func State(s, countryCode string) string { if s == "" || reject(s, 0) { return Empty } // Remove whitespace from name. s = strings.TrimSpace(s) // Empty? if s == "" || s == txt.UnknownStateCode { // State doesn't have a name. return "" } // Remove non-printable and other potentially problematic characters. s = strings.Map(func(r rune) rune { if !unicode.IsPrint(r) { return -1 } switch r { case '~', '\\', ':', '|', '"', '?', '*', '<', '>', '{', '}': return -1 default: return r } }, s) // Normalize country code. countryCode = strings.ToLower(strings.TrimSpace(countryCode)) // Is the name an abbreviation that should be normalized? if states, found := txt.StatesByCountry[countryCode]; !found { // Unknown country. } else if normalized, found := states[s]; !found { // Unknown abbreviation. } else if normalized != "" { // Yes, use normalized name. s = normalized } return txt.Clip(s, txt.ClipName) }