From f5d16cc4237e2f9eff19cd55978f0dd9aa7d81ef Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Tue, 23 Jun 2015 18:27:16 +0900 Subject: [PATCH] Handle invalid versions better --- database.go | 9 +++++++-- vfs.go | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/database.go b/database.go index b4267ba..5744b74 100644 --- a/database.go +++ b/database.go @@ -23,6 +23,7 @@ package main import ( + "errors" "fmt" "io/ioutil" "path" @@ -41,7 +42,7 @@ type database struct { vers verList } -func newDatabase(dir string, index int, writable bool) (*database, error) { +func newDatabase(dir string, index uint, writable bool) (*database, error) { db := &database{base: dir} if err := db.load(dir, index, writable); err != nil { return nil, err @@ -50,7 +51,7 @@ func newDatabase(dir string, index int, writable bool) (*database, error) { return db, nil } -func (db *database) load(dir string, index int, writable bool) error { +func (db *database) load(dir string, index uint, writable bool) error { var err error db.base, err = filepath.Abs(dir) @@ -69,6 +70,10 @@ func (db *database) load(dir string, index int, writable bool) error { return err } + if index > uint(len(db.vers)) { + return errors.New("invalid version index") + } + if index > 0 { db.vers = db.vers[:index] } diff --git a/vfs.go b/vfs.go index dd36023..e39a8fe 100644 --- a/vfs.go +++ b/vfs.go @@ -40,7 +40,7 @@ func usage() { } func main() { - version := flag.Int("version", 0, "version index (specify 0 for latest)") + version := flag.Uint("version", 0, "version index (0 for head)") readonly := flag.Bool("readonly", false, "mount filesystem as readonly") flag.Usage = usage flag.Parse()