syncbase: fix minor bug in glob error handling

Change-Id: Idb0adce273134cd20b00a34f92d24834e0958b2d
diff --git a/services/syncbase/server/util/glob.go b/services/syncbase/server/util/glob.go
index 98ffd48..fe78670 100644
--- a/services/syncbase/server/util/glob.go
+++ b/services/syncbase/server/util/glob.go
@@ -16,13 +16,10 @@
 	"v.io/x/ref/lib/glob"
 )
 
-// globPatternToPrefix takes "foo*" and returns "foo". It returns ErrBadArg for
-// inputs that are not valid glob patterns as well as for inputs that are valid
-// glob patterns but not valid prefixes.
+// globPatternToPrefix takes "foo*" and returns "foo".
+// It assumes the input pattern is a valid glob pattern, and returns
+// verror.ErrBadArg if the input is not a valid prefix.
 func globPatternToPrefix(pattern string) (string, error) {
-	if _, err := glob.Parse(pattern); err != nil {
-		return "", verror.NewErrBadArg(nil)
-	}
 	if pattern == "" {
 		return "", verror.NewErrBadArg(nil)
 	}
@@ -41,19 +38,23 @@
 	return res, nil
 }
 
+// Takes ownership of sn.
 // TODO(sadovsky): It sucks that Glob must be implemented differently from other
 // streaming RPC handlers. I don't have much confidence that I've implemented
 // both types of streaming correctly.
 func Glob(ctx *context.T, call rpc.ServerCall, pattern string, sn store.Snapshot, stKeyPrefix string) (<-chan naming.GlobReply, error) {
 	// TODO(sadovsky): Support glob with non-prefix pattern.
+	if _, err := glob.Parse(pattern); err != nil {
+		sn.Close()
+		return nil, verror.New(verror.ErrBadArg, ctx, err)
+	}
 	prefix, err := globPatternToPrefix(pattern)
 	if err != nil {
 		sn.Close()
 		if verror.ErrorID(err) == verror.ErrBadArg.ID {
 			return nil, verror.NewErrNotImplemented(ctx)
-		} else {
-			return nil, verror.New(verror.ErrInternal, ctx, err)
 		}
+		return nil, verror.New(verror.ErrInternal, ctx, err)
 	}
 	it := sn.Scan(ScanPrefixArgs(stKeyPrefix, prefix))
 	ch := make(chan naming.GlobReply)