coreapi: block: don't allow creation of invalid cidv0s
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Aug 13, 2018 at 21:39 UTC
9b925e0e65a8734d5a75523948960b692c4fc286
4 files changed
+27
-9
core/commands/block.go
+9
-7
@@ -186,10 +186,10 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
186
187
format, formatSet := req.Options["format"].(string)
188
if !formatSet {
189
- if mhtval == mh.SHA2_256 {
190
- format = "v0"
191
- } else {
189
+ if mhtval != mh.SHA2_256 || (mhlen != -1 && mhlen != 32) {
190
format = "protobuf"
191
+ } else {
192
+ format = "v0"
193
}
194
}
195
@@ -260,16 +260,18 @@ It takes a list of base58 encoded multihashes to remove.
260
}
261
262
err = api.Block().Rm(req.Context, rp, options.Block.Force(force))
263
- if err != nil && !quiet {
263
+ if err != nil {
264
res.Emit(&util.RemovedBlock{
265
Hash: rp.Cid().String(),
266
Error: err.Error(),
267
})
268
}
269
270
- res.Emit(&util.RemovedBlock{
271
- Hash: rp.Cid().String(),
272
- })
270
+ if !quiet {
271
+ res.Emit(&util.RemovedBlock{
272
+ Hash: rp.Cid().String(),
273
+ })
274
+ }
275
}
276
},
277
PostRun: cmds.PostRunMap{
core/coreapi/block.go
+16
@@ -38,13 +38,29 @@ func (api *BlockAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Bloc
38
var pref cid.Prefix
39
pref.Version = 1
40
41
+ if settings.Codec == "" {
42
+ if settings.MhType != mh.SHA2_256 || (settings.MhLength != -1 && settings.MhLength != 32) {
43
+ settings.Codec = "protobuf"
44
+ } else {
45
+ settings.Codec = "v0"
46
+ }
47
+ }
48
+
49
formatval, ok := cid.Codecs[settings.Codec]
50
if !ok {
51
return nil, fmt.Errorf("unrecognized format: %s", settings.Codec)
52
}
53
+
54
if settings.Codec == "v0" && settings.MhType == mh.SHA2_256 {
55
pref.Version = 0
56
}
57
+
58
+ if settings.Codec == "v0" {
59
+ if settings.MhType != mh.SHA2_256 || (settings.MhLength != -1 && settings.MhLength != 32) {
60
+ return nil, fmt.Errorf("only sha2-255-32 is allowed with CIDv0")
61
+ }
62
+ }
63
+
64
pref.Codec = formatval
65
66
pref.MhType = settings.MhType
core/coreapi/block_test.go
+1
-1
@@ -55,7 +55,7 @@ func TestBlockPutHash(t *testing.T) {
55
56
res, err := api.Block().Put(ctx, strings.NewReader(`Hello`), opt.Block.Hash(mh.KECCAK_512, -1))
57
if err != nil {
58
- t.Error(err)
58
+ t.Fatal(err)
59
}
60
61
if res.Path().Cid().String() != "zBurKB9YZkcDf6xa53WBE8CFX4ydVqAyf9KPXBFZt5stJzEstaS8Hukkhu4gwpMtc1xHNDbzP7sPtQKyWsP3C8fbhkmrZ" {
core/coreapi/interface/options/block.go
+1
-1
@@ -19,7 +19,7 @@ type BlockRmOption func(*BlockRmSettings) error
19
20
func BlockPutOptions(opts ...BlockPutOption) (*BlockPutSettings, error) {
21
options := &BlockPutSettings{
22
- Codec: "v0",
22
+ Codec: "",
23
MhType: multihash.SHA2_256,
24
MhLength: -1,
25
}