aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing/format/gitattributes/pattern.go
diff options
context:
space:
mode:
authorToon Claes <toon@iotcl.com>2022-10-12 17:24:33 +0200
committerToon Claes <toon@iotcl.com>2022-10-12 17:33:46 +0200
commit7dd5d8f39a3c31c8257c29a8cfa4ef2cf15d4a80 (patch)
tree95f8fa1512318b887697ef5914e3f91b77ee9b81 /plumbing/format/gitattributes/pattern.go
parent08cffa1efade914020497a73907763e8d3707a77 (diff)
downloadgo-git-7dd5d8f39a3c31c8257c29a8cfa4ef2cf15d4a80.tar.gz
plumbing: gitattributes, Avoid index out of range
When a path is deeper than the single asterisk pattern the code would crash with a "index out of range". This change checks the length of the remaining pattern before it references an element of that slice. With a single trailing asterisk paths deeper than the pattern should not get the attributes. For example with the following `.gitattributes` file: thirdparty/* linguist-vendored This is how git handles it: $ git check-attr --all thirdparty/README.md thirdparty/README.md: diff: markdown thirdparty/README.md: linguist-vendored: set $ git check-attr --all thirdparty/package/README.md thirdparty/package/README.md: diff: markdown
Diffstat (limited to 'plumbing/format/gitattributes/pattern.go')
-rw-r--r--plumbing/format/gitattributes/pattern.go5
1 files changed, 5 insertions, 0 deletions
diff --git a/plumbing/format/gitattributes/pattern.go b/plumbing/format/gitattributes/pattern.go
index d961aba..f101f47 100644
--- a/plumbing/format/gitattributes/pattern.go
+++ b/plumbing/format/gitattributes/pattern.go
@@ -52,6 +52,11 @@ func (p *pattern) Match(path []string) bool {
var match, doublestar bool
var err error
for _, part := range path {
+ // path is deeper than pattern
+ if len(pattern) == 0 {
+ return false
+ }
+
// skip empty
if pattern[0] == "" {
pattern = pattern[1:]