From 468494e5e5cfc6f042ea6141703aea335b6cc30b Mon Sep 17 00:00:00 2001
From: Henry <cryptix@riseup.net>
Date: Sun, 19 Oct 2014 17:07:03 +0200
Subject: [PATCH] break with ErrObjectTooLarge

---
 core/commands/object.go | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/core/commands/object.go b/core/commands/object.go
index be7cc71d7..5d0ccddab 100644
--- a/core/commands/object.go
+++ b/core/commands/object.go
@@ -93,6 +93,11 @@ func ObjectGet(n *core.IpfsNode, args []string, opts map[string]interface{}, out
 	return err
 }
 
+// ErrObjectTooLarge is returned when too much data was read from stdin. current limit 512k
+var ErrObjectTooLarge = errors.New("input object was too large. limit is 512kbytes")
+
+const inputLimit = 512 * 1024
+
 // ObjectPut takes a format option, serilizes bytes from stdin and updates the dag with that data
 func ObjectPut(n *core.IpfsNode, args []string, opts map[string]interface{}, out io.Writer) error {
 	var (
@@ -101,11 +106,15 @@ func ObjectPut(n *core.IpfsNode, args []string, opts map[string]interface{}, out
 		err     error
 	)
 
-	data, err = ioutil.ReadAll(io.LimitReader(os.Stdin, 512*1024))
+	data, err = ioutil.ReadAll(io.LimitReader(os.Stdin, inputLimit+10))
 	if err != nil {
 		return fmt.Errorf("ObjectPut error: %v", err)
 	}
 
+	if len(data) >= inputLimit {
+		return ErrObjectTooLarge
+	}
+
 	switch getObjectEnc(opts["encoding"]) {
 	case objectEncodingJSON:
 		dagnode = new(dag.Node)
-- 
GitLab