34
34
#define IN_PACK (obj ) oe_in_pack(&to_pack, obj)
35
35
#define SIZE (obj ) oe_size(&to_pack, obj)
36
36
#define SET_SIZE (obj ,size ) oe_set_size(&to_pack, obj, size)
37
+ #define DELTA_SIZE (obj ) oe_delta_size(&to_pack, obj)
37
38
#define DELTA (obj ) oe_delta(&to_pack, obj)
38
39
#define DELTA_CHILD (obj ) oe_delta_child(&to_pack, obj)
39
40
#define DELTA_SIBLING (obj ) oe_delta_sibling(&to_pack, obj)
40
41
#define SET_DELTA (obj , val ) oe_set_delta(&to_pack, obj, val)
42
+ #define SET_DELTA_SIZE (obj , val ) oe_set_delta_size(&to_pack, obj, val)
41
43
#define SET_DELTA_CHILD (obj , val ) oe_set_delta_child(&to_pack, obj, val)
42
44
#define SET_DELTA_SIBLING (obj , val ) oe_set_delta_sibling(&to_pack, obj, val)
43
45
@@ -144,7 +146,7 @@ static void *get_delta(struct object_entry *entry)
144
146
oid_to_hex (& DELTA (entry )-> idx .oid ));
145
147
delta_buf = diff_delta (base_buf , base_size ,
146
148
buf , size , & delta_size , 0 );
147
- if (!delta_buf || delta_size != entry -> delta_size )
149
+ if (!delta_buf || delta_size != DELTA_SIZE ( entry ) )
148
150
die ("delta size changed" );
149
151
free (buf );
150
152
free (base_buf );
@@ -294,14 +296,14 @@ static unsigned long write_no_reuse_object(struct hashfile *f, struct object_ent
294
296
FREE_AND_NULL (entry -> delta_data );
295
297
entry -> z_delta_size = 0 ;
296
298
} else if (entry -> delta_data ) {
297
- size = entry -> delta_size ;
299
+ size = DELTA_SIZE ( entry ) ;
298
300
buf = entry -> delta_data ;
299
301
entry -> delta_data = NULL ;
300
302
type = (allow_ofs_delta && DELTA (entry )-> idx .offset ) ?
301
303
OBJ_OFS_DELTA : OBJ_REF_DELTA ;
302
304
} else {
303
305
buf = get_delta (entry );
304
- size = entry -> delta_size ;
306
+ size = DELTA_SIZE ( entry ) ;
305
307
type = (allow_ofs_delta && DELTA (entry )-> idx .offset ) ?
306
308
OBJ_OFS_DELTA : OBJ_REF_DELTA ;
307
309
}
@@ -1509,7 +1511,7 @@ static void check_object(struct object_entry *entry)
1509
1511
oe_set_type (entry , entry -> in_pack_type );
1510
1512
SET_SIZE (entry , in_pack_size ); /* delta size */
1511
1513
SET_DELTA (entry , base_entry );
1512
- entry -> delta_size = in_pack_size ;
1514
+ SET_DELTA_SIZE ( entry , in_pack_size ) ;
1513
1515
entry -> delta_sibling_idx = base_entry -> delta_child_idx ;
1514
1516
SET_DELTA_CHILD (base_entry , entry );
1515
1517
unuse_pack (& w_curs );
@@ -1937,7 +1939,7 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
1937
1939
max_size = trg_size /2 - 20 ;
1938
1940
ref_depth = 1 ;
1939
1941
} else {
1940
- max_size = trg_entry -> delta_size ;
1942
+ max_size = DELTA_SIZE ( trg_entry ) ;
1941
1943
ref_depth = trg -> depth ;
1942
1944
}
1943
1945
max_size = (uint64_t )max_size * (max_depth - src -> depth ) /
@@ -2006,10 +2008,14 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
2006
2008
delta_buf = create_delta (src -> index , trg -> data , trg_size , & delta_size , max_size );
2007
2009
if (!delta_buf )
2008
2010
return 0 ;
2011
+ if (delta_size >= (1U << OE_DELTA_SIZE_BITS )) {
2012
+ free (delta_buf );
2013
+ return 0 ;
2014
+ }
2009
2015
2010
2016
if (DELTA (trg_entry )) {
2011
2017
/* Prefer only shallower same-sized deltas. */
2012
- if (delta_size == trg_entry -> delta_size &&
2018
+ if (delta_size == DELTA_SIZE ( trg_entry ) &&
2013
2019
src -> depth + 1 >= trg -> depth ) {
2014
2020
free (delta_buf );
2015
2021
return 0 ;
@@ -2024,7 +2030,7 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
2024
2030
free (trg_entry -> delta_data );
2025
2031
cache_lock ();
2026
2032
if (trg_entry -> delta_data ) {
2027
- delta_cache_size -= trg_entry -> delta_size ;
2033
+ delta_cache_size -= DELTA_SIZE ( trg_entry ) ;
2028
2034
trg_entry -> delta_data = NULL ;
2029
2035
}
2030
2036
if (delta_cacheable (src_size , trg_size , delta_size )) {
@@ -2037,7 +2043,7 @@ static int try_delta(struct unpacked *trg, struct unpacked *src,
2037
2043
}
2038
2044
2039
2045
SET_DELTA (trg_entry , src_entry );
2040
- trg_entry -> delta_size = delta_size ;
2046
+ SET_DELTA_SIZE ( trg_entry , delta_size ) ;
2041
2047
trg -> depth = src -> depth + 1 ;
2042
2048
2043
2049
return 1 ;
@@ -2160,11 +2166,11 @@ static void find_deltas(struct object_entry **list, unsigned *list_size,
2160
2166
if (entry -> delta_data && !pack_to_stdout ) {
2161
2167
unsigned long size ;
2162
2168
2163
- size = do_compress (& entry -> delta_data , entry -> delta_size );
2169
+ size = do_compress (& entry -> delta_data , DELTA_SIZE ( entry ) );
2164
2170
if (size < (1U << OE_Z_DELTA_BITS )) {
2165
2171
entry -> z_delta_size = size ;
2166
2172
cache_lock ();
2167
- delta_cache_size -= entry -> delta_size ;
2173
+ delta_cache_size -= DELTA_SIZE ( entry ) ;
2168
2174
delta_cache_size += entry -> z_delta_size ;
2169
2175
cache_unlock ();
2170
2176
} else {
0 commit comments