From 8e275f286138db88140d1643d1008f130ba7f484 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Mon, 25 Mar 2019 10:43:57 +0100 Subject: Avoided stack overflows with empty dynamic parameters. --- plugins/dwarf/format.c | 2 +- plugins/elf/symbols.c | 2 +- plugins/ropgadgets/select.c | 2 +- src/analysis/disass/limit.c | 2 +- src/arch/target.c | 4 ++-- src/arch/vmpa.h | 3 +++ src/core/params.c | 8 ++++---- src/glibext/gbuffercache.c | 2 +- src/gtkext/gtkstatusstack.c | 2 +- src/gui/panels/strings.c | 2 +- src/plugins/plugin.c | 10 +++++----- 11 files changed, 21 insertions(+), 18 deletions(-) diff --git a/plugins/dwarf/format.c b/plugins/dwarf/format.c index e071f1c..cb042b7 100644 --- a/plugins/dwarf/format.c +++ b/plugins/dwarf/format.c @@ -85,7 +85,7 @@ GDbgFormat *check_dwarf_format(GExeFormat *format) matched = true; for (i = 0; i < ARRAY_SIZE(section_names) && matched; i++) - matched = g_exe_format_get_section_range_by_name(format, section_names[i], (mrange_t []) { 0 }); + matched = g_exe_format_get_section_range_by_name(format, section_names[i], UNUSED_MRANGE_PTR); if (matched) result = g_dwarf_format_new(format); diff --git a/plugins/elf/symbols.c b/plugins/elf/symbols.c index 5ddc99c..46e5ff8 100644 --- a/plugins/elf/symbols.c +++ b/plugins/elf/symbols.c @@ -139,7 +139,7 @@ bool load_elf_symbols(GElfFormat *format, wgroup_id_t gid, GtkStatusStack *statu /* Symboles importés et/ou exportés */ - if (find_elf_dynamic_program_header(format, (elf_phdr []) { 0 })) + if (find_elf_dynamic_program_header(format, (elf_phdr []) { { { 0 } } })) { log_variadic_message(LMT_INFO, _("Binary is dynamically linked")); diff --git a/plugins/ropgadgets/select.c b/plugins/ropgadgets/select.c index 019855b..3e5e453 100644 --- a/plugins/ropgadgets/select.c +++ b/plugins/ropgadgets/select.c @@ -1530,7 +1530,7 @@ static void add_new_gadgets_for_category(GExeFormat *format, GtkComboBoxText *co { instr = chain->instrs[j]; - line = g_buffer_line_new((mrange_t []){ { { 0 }, 0 } }, BLC_ASSEMBLY); + line = g_buffer_line_new(UNUSED_MRANGE_PTR, BLC_ASSEMBLY); g_line_generator_print(G_LINE_GENERATOR(instr), line, -1, 0, content); if (j == 0) diff --git a/src/analysis/disass/limit.c b/src/analysis/disass/limit.c index 103f878..b0ac6fc 100644 --- a/src/analysis/disass/limit.c +++ b/src/analysis/disass/limit.c @@ -76,7 +76,7 @@ void compute_routine_limit(GBinSymbol *symbol, const vmpa2t *next, GArchProcesso /* Dans tous les cas, on va se référer à la portion contenante... */ - portion = g_binary_portion_find_at_addr(portions, &addr, (GdkRectangle []) { }); + portion = g_binary_portion_find_at_addr(portions, &addr, (GdkRectangle []) { { 0 } }); assert(portion != NULL); range = g_binary_portion_get_range(portion); diff --git a/src/arch/target.c b/src/arch/target.c index d3bd89a..db4d058 100644 --- a/src/arch/target.c +++ b/src/arch/target.c @@ -274,8 +274,8 @@ static int g_target_operand_compare(const GTargetOperand *a, const GTargetOperan } else if (a->symbol != NULL && b->symbol != NULL) { - result = g_binary_symbol_cmp((const GBinSymbol * []) { a->symbol }, - (const GBinSymbol * []) { b->symbol }); + result = g_binary_symbol_cmp((const GBinSymbol *[]) { a->symbol }, + (const GBinSymbol *[]) { b->symbol }); if (result != 0) goto gtoc_done; } diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h index d2cc39b..fc997e5 100644 --- a/src/arch/vmpa.h +++ b/src/arch/vmpa.h @@ -176,6 +176,9 @@ typedef struct _mrange_t } mrange_t; +#define UNUSED_MRANGE_PTR (mrange_t []) { { { 0 }, 0 } } + + #define get_mrange_addr(r) &(r)->addr #define get_mrange_length(r) (r)->length diff --git a/src/core/params.c b/src/core/params.c index 3d0880a..6467182 100644 --- a/src/core/params.c +++ b/src/core/params.c @@ -204,16 +204,16 @@ bool load_main_config_parameters(void) param = g_generic_config_create_param(config, MPK_TOOLTIP_MAX_STRINGS, CPT_INTEGER, 5); if (param == NULL) return false; - param = g_generic_config_create_param(config, MPK_LINK_DEFAULT, CPT_COLOR, ((GdkRGBA []) {{ 0, 0, 0, 1.0 }})); + param = g_generic_config_create_param(config, MPK_LINK_DEFAULT, CPT_COLOR, ((GdkRGBA []) { { 0, 0, 0, 1.0 } })); if (param == NULL) return false; - param = g_generic_config_create_param(config, MPK_LINK_BRANCH_TRUE, CPT_COLOR, ((GdkRGBA []) {{ 0, 0.6, 0, 1.0 }})); + param = g_generic_config_create_param(config, MPK_LINK_BRANCH_TRUE, CPT_COLOR, ((GdkRGBA []) { { 0, 0.6, 0, 1.0 } })); if (param == NULL) return false; - param = g_generic_config_create_param(config, MPK_LINK_BRANCH_FALSE, CPT_COLOR, ((GdkRGBA []) {{ 0.8, 0, 0, 1.0 }})); + param = g_generic_config_create_param(config, MPK_LINK_BRANCH_FALSE, CPT_COLOR, ((GdkRGBA []) { { 0.8, 0, 0, 1.0 } })); if (param == NULL) return false; - param = g_generic_config_create_param(config, MPK_LINK_LOOP, CPT_COLOR, ((GdkRGBA []) {{ 0, 0, 0.8, 1.0 }})); + param = g_generic_config_create_param(config, MPK_LINK_LOOP, CPT_COLOR, ((GdkRGBA []) { { 0, 0, 0.8, 1.0 } })); if (param == NULL) return false; param = g_generic_config_create_param(config, MPK_KEYBINDINGS_EDIT, CPT_STRING, "F2"); diff --git a/src/glibext/gbuffercache.c b/src/glibext/gbuffercache.c index 8d02dd8..82d77c0 100644 --- a/src/glibext/gbuffercache.c +++ b/src/glibext/gbuffercache.c @@ -449,7 +449,7 @@ static GBufferLine *get_cache_info_line(cache_info *info, size_t index, const GB if (result == NULL) { - result = g_buffer_line_new((mrange_t []){ { { 0 }, 0 } }, 0/* !! */); + result = g_buffer_line_new(UNUSED_MRANGE_PTR, 0/* !! */); g_object_add_toggle_ref(G_OBJECT(result), (GToggleNotify)on_line_ref_toggle, info); diff --git a/src/gtkext/gtkstatusstack.c b/src/gtkext/gtkstatusstack.c index e36c406..45bd667 100644 --- a/src/gtkext/gtkstatusstack.c +++ b/src/gtkext/gtkstatusstack.c @@ -547,7 +547,7 @@ void gtk_status_stack_update_current_instruction(GtkStatusStack *stack, const GL portions = g_exe_format_get_portions(format); - portion = g_binary_portion_find_at_addr(portions, addr, (GdkRectangle []) { }); + portion = g_binary_portion_find_at_addr(portions, addr, (GdkRectangle []) { { 0 } }); text = g_binary_portion_get_desc(portion); diff --git a/src/gui/panels/strings.c b/src/gui/panels/strings.c index 048fa28..8248c08 100644 --- a/src/gui/panels/strings.c +++ b/src/gui/panels/strings.c @@ -776,7 +776,7 @@ static void reload_strings_for_new_list_view(const GStringsPanel *panel, GtkStat vmpa2_phys_to_string(addr, size, phys, NULL); vmpa2_virt_to_string(addr, size, virt, NULL); - portion = g_binary_portion_find_at_addr(portions, addr, (GdkRectangle []) { }); + portion = g_binary_portion_find_at_addr(portions, addr, (GdkRectangle []) { { 0 } }); area = g_binary_portion_get_desc(portion); g_object_unref(G_OBJECT(portion)); diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index 1bdcf04..27f1871 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -260,11 +260,11 @@ GPluginModule *g_plugin_module_new(const gchar *filename) /* Localisation des différents points d'entrée déclarés */ -#define check_plugin_symbol(mod, sym) \ - ({ \ - bool __result; \ - __result = g_module_symbol(mod, sym, (gpointer []) { 0 }); \ - __result; \ +#define check_plugin_symbol(mod, sym) \ + ({ \ + bool __result; \ + __result = g_module_symbol(mod, sym, (gpointer []) { NULL }); \ + __result; \ }) -- cgit v0.11.2-87-g4458