@@ -19,6 +19,8 @@ pub(crate) mod error {
1919 LoadIndex ( #[ from] crate :: store:: load_index:: Error ) ,
2020 #[ error( transparent) ]
2121 LoadPack ( #[ from] std:: io:: Error ) ,
22+ #[ error( transparent) ]
23+ EntryType ( #[ from] gix_pack:: data:: entry:: decode:: Error ) ,
2224 #[ error( "Reached recursion limit of {} while resolving ref delta bases for {}" , . max_depth, . id) ]
2325 DeltaBaseRecursionLimit {
2426 /// the maximum recursion depth we encountered.
@@ -144,19 +146,21 @@ where
144146 }
145147 } ,
146148 } ;
147- let entry = pack. entry ( pack_offset) ;
149+ let entry = pack. entry ( pack_offset) ? ;
148150 let header_size = entry. header_size ( ) ;
149- let res = match pack. decode_entry (
151+ let res = pack. decode_entry (
150152 entry,
151153 buffer,
152154 inflate,
153155 & |id, _out| {
154- index_file. pack_offset_by_id ( id) . map ( |pack_offset| {
155- gix_pack:: data:: decode:: entry:: ResolvedBase :: InPack ( pack. entry ( pack_offset) )
156- } )
156+ let pack_offset = index_file. pack_offset_by_id ( id) ?;
157+ pack. entry ( pack_offset)
158+ . ok ( )
159+ . map ( gix_pack:: data:: decode:: entry:: ResolvedBase :: InPack )
157160 } ,
158161 pack_cache,
159- ) {
162+ ) ;
163+ let res = match res {
160164 Ok ( r) => Ok ( (
161165 gix_object:: Data {
162166 kind : r. kind ,
@@ -230,7 +234,7 @@ where
230234 let pack = possibly_pack
231235 . as_ref ( )
232236 . expect ( "pack to still be available like just now" ) ;
233- let entry = pack. entry ( pack_offset) ;
237+ let entry = pack. entry ( pack_offset) ? ;
234238 let header_size = entry. header_size ( ) ;
235239 pack. decode_entry (
236240 entry,
@@ -239,10 +243,10 @@ where
239243 & |id, out| {
240244 index_file
241245 . pack_offset_by_id ( id)
242- . map ( |pack_offset| {
243- gix_pack :: data :: decode :: entry:: ResolvedBase :: InPack (
244- pack . entry ( pack_offset ) ,
245- )
246+ . and_then ( |pack_offset| {
247+ pack . entry ( pack_offset )
248+ . ok ( )
249+ . map ( gix_pack :: data :: decode :: entry :: ResolvedBase :: InPack )
246250 } )
247251 . or_else ( || {
248252 ( id == base_id) . then ( || {
@@ -398,7 +402,7 @@ where
398402 }
399403 } ,
400404 } ;
401- let entry = pack. entry ( pack_offset) ;
405+ let entry = pack. entry ( pack_offset) . ok ( ) ? ;
402406
403407 buf. resize ( entry. decompressed_size . try_into ( ) . expect ( "representable size" ) , 0 ) ;
404408 assert_eq ! ( pack. id, pack_id. to_intrinsic_pack_id( ) , "both ids must always match" ) ;
0 commit comments