]> Cypherpunks repositories - gostls13.git/commitdiff
path/filepath: Panic in Match when parsing invalid character range.
authorPieter Droogendijk <pieter@binky.org.uk>
Wed, 31 Jul 2013 06:58:28 +0000 (16:58 +1000)
committerRob Pike <r@golang.org>
Wed, 31 Jul 2013 06:58:28 +0000 (16:58 +1000)
Fixes #5668.

R=golang-dev, rsc, r
CC=golang-dev
https://golang.org/cl/12001056

src/pkg/path/filepath/match.go
src/pkg/path/filepath/match_test.go
src/pkg/path/match_test.go

index db8b0260ca88d324cb334b586af70211e9b00fd8..3d84145d7f892574c1e132719221ca60f66fa5ff 100644 (file)
@@ -132,6 +132,12 @@ func matchChunk(chunk, s string) (rest string, ok bool, err error) {
                        r, n := utf8.DecodeRuneInString(s)
                        s = s[n:]
                        chunk = chunk[1:]
+                       // We can't end right after '[', we're expecting at least
+                       // a closing bracket and possibly a caret.
+                       if len(chunk) == 0 {
+                               err = ErrBadPattern
+                               return
+                       }
                        // possibly negated
                        negated := chunk[0] == '^'
                        if negated {
index f1bc60e354efc54269942ed9298e41dd8d376263..13108ce1efcb19a670cb449d1132a8c9b59cacc0 100644 (file)
@@ -65,6 +65,11 @@ var matchTests = []MatchTest{
        {"[-x]", "a", false, ErrBadPattern},
        {"\\", "a", false, ErrBadPattern},
        {"[a-b-c]", "a", false, ErrBadPattern},
+       {"[", "a", false, ErrBadPattern},
+       {"[^", "a", false, ErrBadPattern},
+       {"[^bc", "a", false, ErrBadPattern},
+       {"a[", "a", false, nil},
+       {"a[", "ab", false, ErrBadPattern},
        {"*x", "xxx", true, nil},
 }
 
index 730b6b90395c7b995170656e57202f93df32696d..6b0676f81fde9960cd383115bf847b11c62b4185 100644 (file)
@@ -61,6 +61,11 @@ var matchTests = []MatchTest{
        {"[-x]", "a", false, ErrBadPattern},
        {"\\", "a", false, ErrBadPattern},
        {"[a-b-c]", "a", false, ErrBadPattern},
+       {"[", "a", false, ErrBadPattern},
+       {"[^", "a", false, ErrBadPattern},
+       {"[^bc", "a", false, ErrBadPattern},
+       {"a[", "a", false, nil},
+       {"a[", "ab", false, ErrBadPattern},
        {"*x", "xxx", true, nil},
 }