fspath: allow unicode numbers and letters in remote names
Previously it was limited to plain ASCII (0-9, A-Z, a-z). Implemented by adding \p{L}\p{N} alongside the \w in the regex, even though these overlap it means we can be sure it is 100% backwards compatible. Fixes #6618
This commit is contained in:
parent
f650a543ef
commit
8e6a469f98
4 changed files with 18 additions and 4 deletions
|
@ -3431,7 +3431,7 @@ func (f *Fs) Command(ctx context.Context, name string, arg []string, opt map[str
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
re := regexp.MustCompile(`[^\w_. -]+`)
|
||||
re := regexp.MustCompile(`[^\w\p{L}\p{N}. -]+`)
|
||||
if _, ok := opt["config"]; ok {
|
||||
lines := []string{}
|
||||
upstreams := []string{}
|
||||
|
|
|
@ -338,10 +338,18 @@ Will get their own names
|
|||
### Valid remote names
|
||||
|
||||
Remote names are case sensitive, and must adhere to the following rules:
|
||||
- May only contain `0`-`9`, `A`-`Z`, `a`-`z`, `_`, `-`, `.` and space.
|
||||
- May contain number, letter, `_`, `-`, `.` and space.
|
||||
- May not start with `-` or space.
|
||||
- May not end with space.
|
||||
|
||||
Starting with rclone version 1.61, any Unicode numbers and letters are allowed,
|
||||
while in older versions it was limited to plain ASCII (0-9, A-Z, a-z). If you use
|
||||
the same rclone configuration from different shells, which may be configured with
|
||||
different character encoding, you must be cautious to use characters that are
|
||||
possible to write in all of them. This is mostly a problem on Windows, where
|
||||
the console traditionally uses a non-Unicode character set - defined
|
||||
by the so-called "code page".
|
||||
|
||||
Quoting and the shell
|
||||
---------------------
|
||||
|
||||
|
|
|
@ -13,11 +13,11 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
configNameRe = `[\w.-]+(?: +[\w.-]+)*`
|
||||
configNameRe = `[\w\p{L}\p{N}.-]+(?: +[\w\p{L}\p{N}.-]+)*`
|
||||
)
|
||||
|
||||
var (
|
||||
errInvalidCharacters = errors.New("config name contains invalid characters - may only contain `0-9`, `A-Z`, `a-z`, `_`, `-`, `.` and space, while not start or end with space")
|
||||
errInvalidCharacters = errors.New("config name contains invalid characters - may only contain numbers, letters, `_`, `-`, `.` and space, while not start or end with space")
|
||||
errCantBeEmpty = errors.New("can't use empty string as a path")
|
||||
errCantStartWithDash = errors.New("config name starts with `-`")
|
||||
errBadConfigParam = errors.New("config parameters may only contain `0-9`, `A-Z`, `a-z` and `_`")
|
||||
|
|
|
@ -23,6 +23,7 @@ func TestCheckConfigName(t *testing.T) {
|
|||
want error
|
||||
}{
|
||||
{"remote", nil},
|
||||
{"REMOTE", nil},
|
||||
{"", errInvalidCharacters},
|
||||
{":remote:", errInvalidCharacters},
|
||||
{"remote:", errInvalidCharacters},
|
||||
|
@ -38,6 +39,8 @@ func TestCheckConfigName(t *testing.T) {
|
|||
{"..", nil},
|
||||
{".r.e.m.o.t.e.", nil},
|
||||
{"rem ote", nil},
|
||||
{"blåbær", nil},
|
||||
{"chữ Quốc ngữ", nil},
|
||||
{"remote ", errInvalidCharacters},
|
||||
{" remote", errInvalidCharacters},
|
||||
{" remote ", errInvalidCharacters},
|
||||
|
@ -53,6 +56,7 @@ func TestCheckRemoteName(t *testing.T) {
|
|||
want error
|
||||
}{
|
||||
{":remote:", nil},
|
||||
{":REMOTE:", nil},
|
||||
{":s3:", nil},
|
||||
{"remote:", nil},
|
||||
{".:", nil},
|
||||
|
@ -60,6 +64,8 @@ func TestCheckRemoteName(t *testing.T) {
|
|||
{".r.e.m.o.t.e.:", nil},
|
||||
{"-r-emote-:", nil},
|
||||
{"rem ote:", nil},
|
||||
{"blåbær:", nil},
|
||||
{"chữ Quốc ngữ:", nil},
|
||||
{"remote :", errInvalidCharacters},
|
||||
{" remote:", errInvalidCharacters},
|
||||
{" remote :", errInvalidCharacters},
|
||||
|
|
Loading…
Reference in a new issue