Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions ygot/pathstrings.go
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,14 @@ func extractKV(in string) (string, map[string]string, error) {
inEscape = false
}

if inKey {
return "", nil, fmt.Errorf("received an unterminated key in element %s", in)
}

if inEscape {
return "", nil, fmt.Errorf("received a trailing escape character in element %s", in)
}

if len(keys) == 0 {
name = buf.String()
}
Expand Down
22 changes: 22 additions & 0 deletions ygot/pathstrings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,16 @@ func TestStringToPath(t *testing.T) {
in: `/foo/bar[[bar=baz]`,
wantSliceErr: "received an unescaped [ in key of element bar",
wantStructuredErr: "received an unescaped [ in key of element bar",
}, {
name: "unterminated key",
in: `/foo/bar[baz=bat`,
wantSliceErr: "received an unterminated key in element bar[baz=bat",
wantStructuredErr: "received an unterminated key in element bar[baz=bat",
}, {
name: "unterminated key with escaped ]",
in: `/foo/bar[baz=bat\]`,
wantSliceErr: `received an unterminated key in element bar[baz=bat\]`,
wantStructuredErr: `received an unterminated key in element bar[baz=bat\]`,
}, {
name: "element with unescaped ]",
in: `/foo/bar]`,
Expand Down Expand Up @@ -485,6 +495,18 @@ func TestPathToSchemaPath(t *testing.T) {
Element: []string{"interfaces", "interface[name=eth0]", "config", "description"},
},
want: "/interfaces/interface/config/description",
}, {
name: "element path with an unterminated predicate",
inPath: &gnmipb.Path{
Element: []string{"interfaces", "interface[name=eth0"},
},
wantErrSubstring: "received an unterminated key in element interface[name=eth0",
}, {
name: "element path with a trailing escape character",
inPath: &gnmipb.Path{
Element: []string{"interfaces", `interface\`},
},
wantErrSubstring: `received a trailing escape character in element interface\`,
}, {
name: "elem path with no keys",
inPath: &gnmipb.Path{
Expand Down