Skip to content

Commit 7d6dd01

Browse files
committed
Fix debuginfod downloads leaking a BinaryView
It wasn't closing the downloaded FileMetadata object
1 parent afa9a63 commit 7d6dd01

File tree

1 file changed

+21
-22
lines changed
  • rust/examples/dwarf/dwarf_import/src

1 file changed

+21
-22
lines changed

rust/examples/dwarf/dwarf_import/src/lib.rs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -382,43 +382,42 @@ impl CustomDebugInfoParser for DWARFParser {
382382
debug_file: &BinaryView,
383383
progress: Box<dyn Fn(usize, usize) -> Result<(), ()>>,
384384
) -> bool {
385-
let external_file = if !dwarfreader::is_valid(bv) {
385+
let (external_file, close_external) = if !dwarfreader::is_valid(bv) {
386386
if dwarfreader::has_build_id_section(bv) {
387387
if let Ok(Some(debug_view)) = helpers::load_debug_info_for_build_id(bv) {
388-
Some(debug_view)
389-
}
390-
else {
388+
(Some(debug_view), false)
389+
} else {
391390
if dwarfreader::can_use_debuginfod(bv) {
392391
if let Ok(debug_view) = helpers::download_debug_info(bv) {
393-
Some(debug_view)
392+
(Some(debug_view), true)
394393
} else {
395-
None
394+
(None, false)
396395
}
397-
}
398-
else {
399-
None
396+
} else {
397+
(None, false)
400398
}
401399
}
400+
} else {
401+
(None, false)
402402
}
403-
else {
404-
None
405-
}
406-
}
407-
else {
408-
None
403+
} else {
404+
(None, false)
409405
};
410406

411-
match parse_dwarf(bv, external_file.as_deref().unwrap_or(debug_file), progress) {
407+
let result = match parse_dwarf(bv, external_file.as_deref().unwrap_or(debug_file), progress)
408+
{
412409
Ok(mut builder) => {
413-
builder
414-
.post_process(bv, debug_info)
415-
.commit_info(debug_info);
410+
builder.post_process(bv, debug_info).commit_info(debug_info);
416411
true
417-
},
418-
Err(_) => {
419-
false
420412
}
413+
Err(_) => false,
414+
};
415+
416+
if let (Some(ext), true) = (external_file, close_external) {
417+
ext.file().close();
421418
}
419+
420+
result
422421
}
423422
}
424423

0 commit comments

Comments
 (0)