@cryptotaxi247 / kubo / commits / b4de6cce9

object put: Fixed putting objects with JSON encoding

Matt Bell committed Nov 14, 2014 at 00:11 UTC b4de6cce9a2b048972ae6ca084b40d78dbfdb816
1 file changed +33 -18
core/commands2/object.go
+33 -18
@@ -163,23 +163,10 @@ This command outputs data in the following encodings:
163 Marshalers: cmds.MarshalerMap{
164 cmds.EncodingType("protobuf"): func(res cmds.Response) ([]byte, error) {
165 node := res.Output().(*Node)
166 -
167 - // convert the Node object into a real dag.Node
168 - object := new(dag.Node)
169 - object.Data = node.Data
170 - object.Links = make([]*dag.Link, len(node.Links))
171 - for i, link := range node.Links {
172 - hash, err := mh.FromB58String(link.Hash)
173 - if err != nil {
174 - return nil, err
175 - }
176 - object.Links[i] = &dag.Link{
177 - Name: link.Name,
178 - Size: link.Size,
179 - Hash: hash,
180 - }
166 + object, err := deserializeNode(node)
167 + if err != nil {
168 + return nil, err
169 }
182 -
170 return object.Marshal()
171 },
172 },
@@ -292,8 +279,16 @@ func objectPut(n *core.IpfsNode, input io.Reader, encoding string) (*Object, err
279
280 switch getObjectEnc(encoding) {
281 case objectEncodingJSON:
295 - dagnode = new(dag.Node)
296 - err = json.Unmarshal(data, dagnode)
282 + node := new(Node)
283 + err = json.Unmarshal(data, node)
284 + if err != nil {
285 + return nil, err
286 + }
287 +
288 + dagnode, err = deserializeNode(node)
289 + if err != nil {
290 + return nil, err
291 + }
292
293 case objectEncodingProtobuf:
294 dagnode, err = dag.Decoded(data)
@@ -356,3 +351,23 @@ func getOutput(dagnode *dag.Node) (*Object, error) {
351
352 return output, nil
353 }
354 +
355 +// converts the Node object into a real dag.Node
356 +func deserializeNode(node *Node) (*dag.Node, error) {
357 + dagnode := new(dag.Node)
358 + dagnode.Data = node.Data
359 + dagnode.Links = make([]*dag.Link, len(node.Links))
360 + for i, link := range node.Links {
361 + hash, err := mh.FromB58String(link.Hash)
362 + if err != nil {
363 + return nil, err
364 + }
365 + dagnode.Links[i] = &dag.Link{
366 + Name: link.Name,
367 + Size: link.Size,
368 + Hash: hash,
369 + }
370 + }
371 +
372 + return dagnode, nil
373 +}