diff --git a/wgengine/wgcfg/parser.go b/wgengine/wgcfg/parser.go index 518a93992..bf0b45835 100644 --- a/wgengine/wgcfg/parser.go +++ b/wgengine/wgcfg/parser.go @@ -22,10 +22,14 @@ type ParseError struct { } func (e *ParseError) Error() string { - return fmt.Sprintf("%s: ā€˜%sā€™", e.why, e.offender) + return fmt.Sprintf("%s: %q", e.why, e.offender) } func validateEndpoints(s string) error { + if s == "" { + // Otherwise strings.Split of the empty string produces [""]. + return nil + } vals := strings.Split(s, ",") for _, val := range vals { _, _, err := parseEndpoint(val) diff --git a/wgengine/wgcfg/parser_test.go b/wgengine/wgcfg/parser_test.go index e101a3a05..9d4fe1992 100644 --- a/wgengine/wgcfg/parser_test.go +++ b/wgengine/wgcfg/parser_test.go @@ -53,3 +53,21 @@ func TestParseEndpoint(t *testing.T) { t.Error("Error was expected") } } + +func TestValidateEndpoints(t *testing.T) { + tests := []struct { + in string + want error + }{ + {"", nil}, + {"1.2.3.4:5", nil}, + {"1.2.3.4:5,6.7.8.9:10", nil}, + {",", &ParseError{why: "Missing port from endpoint", offender: ""}}, + } + for _, tt := range tests { + got := validateEndpoints(tt.in) + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("%q = %#v (%s); want %#v (%s)", tt.in, got, got, tt.want, tt.want) + } + } +}