+ break;
+ case OBJ_OFS_DELTA:
+ memset(delta_base, 0, sizeof(*delta_base));
+ c = pack_base[pos++];
+ base_offset = c & 127;
+ while (c & 128) {
+ base_offset += 1;
+ if (!base_offset || base_offset & ~(~0UL >> 7))
+ bad_object(offset, "offset value overflow for delta base object");
+ if (pos >= pack_limit)
+ bad_object(offset, "object extends past end of pack");
+ c = pack_base[pos++];
+ base_offset = (base_offset << 7) + (c & 127);
+ }
+ delta_base->offset = offset - base_offset;
+ if (delta_base->offset >= offset)
+ bad_object(offset, "delta base offset is out of bound");
+ break;