diff --git a/go.mod b/go.mod index 1941a52824..d9ca70d28c 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/owncloud/ocis/v2 go 1.21 require ( - github.com/CiscoM31/godata v1.0.9 + github.com/CiscoM31/godata v1.0.10 github.com/KimMachineGun/automemlimit v0.5.0 github.com/Masterminds/semver v1.5.0 github.com/MicahParks/keyfunc v1.9.0 diff --git a/go.sum b/go.sum index f3c0060069..ce7265874f 100644 --- a/go.sum +++ b/go.sum @@ -795,8 +795,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CiscoM31/godata v1.0.9 h1:7ovi2efjWb6RloX96AJqBB9eyIfBdarzj8kzg7glPC4= -github.com/CiscoM31/godata v1.0.9/go.mod h1:ZMiT6JuD3Rm83HEtiTx4JEChsd25YCrxchKGag/sdTc= +github.com/CiscoM31/godata v1.0.10 h1:DZdJ6M8QNh4HquvDDOqNLu6h77Wl86KGK7Qlbmb90sk= +github.com/CiscoM31/godata v1.0.10/go.mod h1:ZMiT6JuD3Rm83HEtiTx4JEChsd25YCrxchKGag/sdTc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/KimMachineGun/automemlimit v0.5.0 h1:BeOe+BbJc8L5chL3OwzVYjVzyvPALdd5wxVVOWuUZmQ= diff --git a/vendor/github.com/CiscoM31/godata/expand_parser.go b/vendor/github.com/CiscoM31/godata/expand_parser.go index fd5e49241e..bf86403156 100644 --- a/vendor/github.com/CiscoM31/godata/expand_parser.go +++ b/vendor/github.com/CiscoM31/godata/expand_parser.go @@ -139,6 +139,14 @@ func ParseExpandItem(ctx context.Context, input tokenQueue) (*ExpandItem, error) queue = &tokenQueue{} } } else if token.Value == "/" && stack.Empty() { + if queue.Empty() { + // Disallow extra leading and intermediate slash, like /Product and Product//Info + return nil, BadRequestError("Empty path segment in expand clause.") + } + if input.Empty() { + // Disallow extra trailing slash, like Product/ + return nil, BadRequestError("Empty path segment in expand clause.") + } // at root level, slashes separate path segments item.Path = append(item.Path, queue.Dequeue()) } else if token.Value == ";" && stack.Size == 1 { diff --git a/vendor/github.com/CiscoM31/godata/select_parser.go b/vendor/github.com/CiscoM31/godata/select_parser.go index 492e0b9710..b3aaae2967 100644 --- a/vendor/github.com/CiscoM31/godata/select_parser.go +++ b/vendor/github.com/CiscoM31/godata/select_parser.go @@ -11,11 +11,16 @@ type SelectItem struct { } func ParseSelectString(ctx context.Context, sel string) (*GoDataSelectQuery, error) { + return GlobalExpressionParser.ParseSelectString(ctx, sel) +} + +func (p *ExpressionParser) ParseSelectString(ctx context.Context, sel string) (*GoDataSelectQuery, error) { items := strings.Split(sel, ",") result := []*SelectItem{} for _, item := range items { + item = strings.TrimSpace(item) cfg, hasComplianceConfig := ctx.Value(odataCompliance).(OdataComplianceConfig) if !hasComplianceConfig { @@ -27,11 +32,28 @@ func ParseSelectString(ctx context.Context, sel string) (*GoDataSelectQuery, err return nil, BadRequestError("Extra comma in $select.") } - segments := []*Token{} - for _, val := range strings.Split(item, "/") { - segments = append(segments, &Token{Value: val}) + if _, err := p.tokenizer.Tokenize(ctx, item); err != nil { + switch e := err.(type) { + case *GoDataError: + return nil, &GoDataError{ + ResponseCode: e.ResponseCode, + Message: "Invalid $select value", + Cause: e, + } + default: + return nil, &GoDataError{ + ResponseCode: 500, + Message: "Invalid $select value", + Cause: e, + } + } + } else { + segments := []*Token{} + for _, val := range strings.Split(item, "/") { + segments = append(segments, &Token{Value: val}) + } + result = append(result, &SelectItem{segments}) } - result = append(result, &SelectItem{segments}) } return &GoDataSelectQuery{result, sel}, nil diff --git a/vendor/modules.txt b/vendor/modules.txt index f0cb3497d3..3a776b4518 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -11,7 +11,7 @@ github.com/Azure/go-ntlmssp ## explicit; go 1.16 github.com/BurntSushi/toml github.com/BurntSushi/toml/internal -# github.com/CiscoM31/godata v1.0.9 +# github.com/CiscoM31/godata v1.0.10 ## explicit; go 1.19 github.com/CiscoM31/godata # github.com/KimMachineGun/automemlimit v0.5.0