提交 44307314 作者: Steven Allen

allow empty nodes in `object put`

And correctly detect unexpected fields.

fixes #1331

License: MIT
Signed-off-by: 's avatarSteven Allen <steven@stebalien.com>
上级 dd16b3ca
......@@ -73,17 +73,14 @@ func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Obj
switch options.InputEnc {
case "json":
node := new(Node)
err = json.Unmarshal(data, node)
decoder := json.NewDecoder(bytes.NewReader(data))
decoder.DisallowUnknownFields()
err = decoder.Decode(node)
if err != nil {
return nil, err
}
// check that we have data in the Node to add
// otherwise we will add the empty object without raising an error
if nodeEmpty(node) {
return nil, errors.New("no data or links in this node")
}
dagnode, err = deserializeNode(node, options.DataType)
if err != nil {
return nil, err
......@@ -93,23 +90,22 @@ func (api *ObjectAPI) Put(ctx context.Context, src io.Reader, opts ...caopts.Obj
dagnode, err = dag.DecodeProtobuf(data)
case "xml":
node := new(Node)
err = xml.Unmarshal(data, node)
// only way to detect additional XML nodes...
var node struct {
Node
Any interface{} `xml:",any"`
}
err = xml.Unmarshal(data, &node)
if err != nil {
return nil, err
}
// check that we have data in the Node to add
// otherwise we will add the empty object without raising an error
if nodeEmpty(node) {
return nil, errors.New("no data or links in this node")
if node.Any != nil {
return nil, fmt.Errorf("unknown fields when parsing XML: %#v", node.Any)
}
dagnode, err = deserializeNode(node, options.DataType)
dagnode, err = deserializeNode(&node.Node, options.DataType)
if err != nil {
return nil, err
}
default:
return nil, errors.New("unknown object encoding")
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论