if (chunkLen == 0) {
return YACErrBlobBadLen;
}
+ if (chunkLen > ((uint64_t)(1) << 60)) {
+ return YACErrLenTooBig;
+ }
atom->typ = YACItemChunkLen;
err = cb(NULL, 0, 0, cbState, atom, off, buf, len);
if (err != YACErrNo) {
func DecodeItem(buf []byte) (item *Item, tail []byte, err error) {
var off int
item, off, err = AtomDecode(buf)
- buf = buf[off:]
- tail = buf
if err != nil {
return
}
+ buf = buf[off:]
+ tail = buf
switch ItemType(item.T) {
case ItemList:
var sub *Item
err = ErrBlobBadLen
return
}
+ if sub.V.(uint64) > (1 << 60) {
+ err = ErrLenTooBig
+ return
+ }
chunkLen := int(sub.V.(uint64))
if chunkLen == 0 {
err = ErrBlobBadLen