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:
albertony 2022-12-10 15:53:42 +01:00 committed by Nick Craig-Wood
parent f650a543ef
commit 8e6a469f98
4 changed files with 18 additions and 4 deletions

View file

@ -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{}

View file

@ -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
---------------------

View file

@ -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 `_`")

View file

@ -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},