From 77778e9311f90f9a40b187ded9e1acc254bb7a35 Mon Sep 17 00:00:00 2001 From: billow Date: Thu, 19 Oct 2023 00:25:46 +0800 Subject: [PATCH] dwarf: fix heap overflow (#3930) --- librz/analysis/dwarf_process.c | 1 + librz/core/cbin.c | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/librz/analysis/dwarf_process.c b/librz/analysis/dwarf_process.c index 532c7d4e6cc..9dbb664ec52 100644 --- a/librz/analysis/dwarf_process.c +++ b/librz/analysis/dwarf_process.c @@ -1965,6 +1965,7 @@ static bool dwarf_integrate_function(void *user, const ut64 k, const void *value RzAnalysisDwarfVariable *dw_var; rz_vector_foreach(&dw_fn->variables, dw_var) { RzAnalysisVar *var = RZ_NEW0(RzAnalysisVar); + rz_analysis_var_init(var); if (!RzAnalysisDwarfVariable_as_RzAnalysisVar(analysis, fn, dw_var, var)) { free(var); continue; diff --git a/librz/core/cbin.c b/librz/core/cbin.c index a23d2e5b85a..5aacdf8b110 100644 --- a/librz/core/cbin.c +++ b/librz/core/cbin.c @@ -1702,8 +1702,9 @@ static bool bin_dwarf(RzCore *core, RzBinFile *binfile, RzCmdStateOutput *state) return false; } - RzBinDWARF *dw = core->analysis->debug_info->dw; - dw = dw ? dw : rz_bin_dwarf_from_file(binfile); + RzBinDWARF *dw = (core->analysis && core->analysis->debug_info && core->analysis->debug_info->dw) + ? core->analysis->debug_info->dw + : rz_bin_dwarf_from_file(binfile); if (!dw) { return false; }