core/commands: get: Error if specified compression level is invalid
Matt Bell committed
Jan 22, 2015 at 15:52 UTC
5efd99c1fe5c0b9e443df5e0cc33bcce40f17850
1 file changed
+23
core/commands/get.go
+23
@@ -4,6 +4,7 @@ import (
4
"archive/tar"
5
"bytes"
6
"compress/gzip"
7
+ "errors"
8
"fmt"
9
"io"
10
"os"
@@ -22,6 +23,8 @@ import (
23
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/cheggaaa/pb"
24
)
25
26
+var ErrInvalidCompressionLevel = errors.New("Compression level must be between 1 and 9")
27
+
28
var GetCmd = &cmds.Command{
29
Helptext: cmds.HelpText{
30
Tagline: "Download IPFS objects",
@@ -47,7 +50,14 @@ may also specify the level of compression by specifying '-l=<1-9>'.
50
cmds.BoolOption("compress", "C", "Compress the output with GZIP compression"),
51
cmds.IntOption("compression-level", "l", "The level of compression (an int between 1 and 9)"),
52
},
53
+ PreRun: getCheckOptions,
54
Run: func(req cmds.Request, res cmds.Response) {
55
+ err := getCheckOptions(req)
56
+ if err != nil {
57
+ res.SetError(err, cmds.ErrClient)
58
+ return
59
+ }
60
+
61
node, err := req.Context().GetNode()
62
if err != nil {
63
res.SetError(err, cmds.ErrNormal)
@@ -62,6 +72,11 @@ may also specify the level of compression by specifying '-l=<1-9>'.
72
} else {
73
compressionLevel = gzip.NoCompression
74
}
75
+ } else {
76
+ if compressionLevel < 1 || compressionLevel > 9 {
77
+ res.SetError(ErrInvalidCompressionLevel, cmds.ErrClient)
78
+ return
79
+ }
80
}
81
82
reader, err := get(node, req.Arguments()[0], compressionLevel)
@@ -217,6 +232,14 @@ may also specify the level of compression by specifying '-l=<1-9>'.
232
},
233
}
234
235
+func getCheckOptions(req cmds.Request) error {
236
+ compressionLevel, found, _ := req.Option("compression-level").Int()
237
+ if found && (compressionLevel < 1 || compressionLevel > 9) {
238
+ return ErrInvalidCompressionLevel
239
+ }
240
+ return nil
241
+}
242
+
243
func get(node *core.IpfsNode, path string, compression int) (io.Reader, error) {
244
buf := NewBufReadWriter()
245