提交 597ba69a 作者: Jeromy Johnson 提交者: GitHub

Merge pull request #3666 from ipfs/fix/cbor-null-arrays

Fix marshaling of null cbor arrays
......@@ -3,14 +3,15 @@ package dagcmd
import (
"fmt"
"io"
"io/ioutil"
"strings"
cmds "github.com/ipfs/go-ipfs/commands"
path "github.com/ipfs/go-ipfs/path"
node "gx/ipfs/QmRSU5EqqWVZSNdbU51yXmVoF1uNw3JgTNB6RaiL7DZM16/go-ipld-node"
ipldcbor "gx/ipfs/QmT1B6cKXnMMki8nbuhrnLuiU32HLvwi6xe99bJ79482UK/go-ipld-cbor"
cid "gx/ipfs/QmcTcsTvfaeEBRFo1TkFgT8sRmgi1n1LTZpecfVP8fzpGD/go-cid"
ipldcbor "gx/ipfs/Qmf658QLDTXfRDgnGmUB6TYj671XjmHScG61p3g7dSxUcF/go-ipld-cbor"
)
var DagCmd = &cmds.Command{
......@@ -80,6 +81,21 @@ into an object of the specified format.
res.SetOutput(&OutputObject{Cid: c})
return
case "raw":
nd, err := convertRawToType(fi, format)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
c, err := n.DAG.Add(nd)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}
res.SetOutput(&OutputObject{Cid: c})
return
default:
res.SetError(fmt.Errorf("unrecognized input encoding: %s", ienc), cmds.ErrNormal)
return
......@@ -141,3 +157,17 @@ func convertJsonToType(r io.Reader, format string) (node.Node, error) {
return nil, fmt.Errorf("unknown target format: %s", format)
}
}
func convertRawToType(r io.Reader, format string) (node.Node, error) {
switch format {
case "cbor", "dag-cbor":
data, err := ioutil.ReadAll(r)
if err != nil {
return nil, err
}
return ipldcbor.Decode(data)
default:
return nil, fmt.Errorf("unsupported target format for raw input: %s", format)
}
}
......@@ -13,8 +13,8 @@ import (
node "gx/ipfs/QmRSU5EqqWVZSNdbU51yXmVoF1uNw3JgTNB6RaiL7DZM16/go-ipld-node"
logging "gx/ipfs/QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52/go-log"
ipldcbor "gx/ipfs/QmT1B6cKXnMMki8nbuhrnLuiU32HLvwi6xe99bJ79482UK/go-ipld-cbor"
cid "gx/ipfs/QmcTcsTvfaeEBRFo1TkFgT8sRmgi1n1LTZpecfVP8fzpGD/go-cid"
ipldcbor "gx/ipfs/Qmf658QLDTXfRDgnGmUB6TYj671XjmHScG61p3g7dSxUcF/go-ipld-cbor"
)
var log = logging.Logger("merkledag")
......
......@@ -272,9 +272,9 @@
},
{
"author": "whyrusleeping",
"hash": "Qmf658QLDTXfRDgnGmUB6TYj671XjmHScG61p3g7dSxUcF",
"hash": "QmT1B6cKXnMMki8nbuhrnLuiU32HLvwi6xe99bJ79482UK",
"name": "go-ipld-cbor",
"version": "1.1.0"
"version": "1.1.8"
},
{
"author": "lgierth",
......
......@@ -90,6 +90,13 @@ test_dag_cmd() {
echo "{\"data\":\"CAISBGZvbwoYBA==\",\"links\":[]}" > cat_exp &&
test_cmp cat_exp cat_out
'
test_expect_success "non-canonical cbor input is normalized" '
DATA="\xa2\x65\x61\x6c\x69\x6e\x6b\xd8\x2a\x58\x25\x00\x01\x71\x12\x20\x65\x96\x50\xfc\x34\x43\xc9\x16\x42\x80\x48\xef\xc5\xba\x45\x58\xdc\x86\x35\x94\x98\x0a\x59\xf5\xcb\x3c\x4d\x84\x86\x7e\x6d\x31\x63\x61\x72\x72\x80"
HASH=$(echo "$DATA" | ipfs dag put --format=cbor --input-enc=raw) &&
test $HASH = "zdpuAyaAXrG12ax4EWuMxvFqBQuzwMGTW8C7NXAotCrcTnSXP" ||
test_fsh echo $HASH
'
}
# should work offline
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论