@cryptotaxi247 / kubo / commits / 9b925e0e6

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 }