diff --git a/product/ERP5Type/BTreeData.py b/product/ERP5Type/BTreeData.py
index 3476fd28e1c9518458b06fc9cbf4f27baf6f9c34..eb87b0acbaba99d147fb5a2de00a25737b0e9e04 100644
--- a/product/ERP5Type/BTreeData.py
+++ b/product/ERP5Type/BTreeData.py
@@ -73,8 +73,7 @@ class BTreeData(Persistent):
                 chunk = tree[lower_key]
                 if lower_key + len(chunk.value) > offset:
                     key = lower_key
-                    chunk_offset = offset - key
-                    buf = chunk.value[:chunk_offset] + buf + chunk.value[chunk_offset + len(buf):]
+                    buf = chunk.value[:offset - key] + buf
         try:
             tree.minKey(len(buf) + offset)
         except ValueError:
@@ -92,7 +91,7 @@ class BTreeData(Persistent):
                 to_write_len = len(buf)
                 next_key = None
             else:
-                to_write_len = next_key - key
+                to_write_len = min(len(buf), next_key - key)
             try:
                 chunk = tree[key]
             except KeyError: