提交 9b925e0e 作者: Łukasz Magiera 提交者: Steven Allen

coreapi: block: don't allow creation of invalid cidv0s

License: MIT
Signed-off-by: 's avatarŁukasz Magiera <magik6k@gmail.com>
上级 c3e69073
......@@ -186,10 +186,10 @@ than 'sha2-256' or format to anything other than 'v0' will result in CIDv1.
format, formatSet := req.Options["format"].(string)
if !formatSet {
if mhtval == mh.SHA2_256 {
format = "v0"
} else {
if mhtval != mh.SHA2_256 || (mhlen != -1 && mhlen != 32) {
format = "protobuf"
} else {
format = "v0"
}
}
......@@ -260,16 +260,18 @@ It takes a list of base58 encoded multihashes to remove.
}
err = api.Block().Rm(req.Context, rp, options.Block.Force(force))
if err != nil && !quiet {
if err != nil {
res.Emit(&util.RemovedBlock{
Hash: rp.Cid().String(),
Error: err.Error(),
})
}
res.Emit(&util.RemovedBlock{
Hash: rp.Cid().String(),
})
if !quiet {
res.Emit(&util.RemovedBlock{
Hash: rp.Cid().String(),
})
}
}
},
PostRun: cmds.PostRunMap{
......
......@@ -38,13 +38,29 @@ func (api *BlockAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Bloc
var pref cid.Prefix
pref.Version = 1
if settings.Codec == "" {
if settings.MhType != mh.SHA2_256 || (settings.MhLength != -1 && settings.MhLength != 32) {
settings.Codec = "protobuf"
} else {
settings.Codec = "v0"
}
}
formatval, ok := cid.Codecs[settings.Codec]
if !ok {
return nil, fmt.Errorf("unrecognized format: %s", settings.Codec)
}
if settings.Codec == "v0" && settings.MhType == mh.SHA2_256 {
pref.Version = 0
}
if settings.Codec == "v0" {
if settings.MhType != mh.SHA2_256 || (settings.MhLength != -1 && settings.MhLength != 32) {
return nil, fmt.Errorf("only sha2-255-32 is allowed with CIDv0")
}
}
pref.Codec = formatval
pref.MhType = settings.MhType
......
......@@ -55,7 +55,7 @@ func TestBlockPutHash(t *testing.T) {
res, err := api.Block().Put(ctx, strings.NewReader(`Hello`), opt.Block.Hash(mh.KECCAK_512, -1))
if err != nil {
t.Error(err)
t.Fatal(err)
}
if res.Path().Cid().String() != "zBurKB9YZkcDf6xa53WBE8CFX4ydVqAyf9KPXBFZt5stJzEstaS8Hukkhu4gwpMtc1xHNDbzP7sPtQKyWsP3C8fbhkmrZ" {
......
......@@ -19,7 +19,7 @@ type BlockRmOption func(*BlockRmSettings) error
func BlockPutOptions(opts ...BlockPutOption) (*BlockPutSettings, error) {
options := &BlockPutSettings{
Codec: "v0",
Codec: "",
MhType: multihash.SHA2_256,
MhLength: -1,
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论