From f9404bf68a067b06986cd85855c43795ec578dbd Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 2 Apr 2018 16:43:47 +0200
Subject: Removed lots of uninitialized uses, mostly in NDEBUG mode.

---
 plugins/arm/instruction.c             |  7 +++++++
 plugins/arm/v7/processor.c            |  5 +++--
 plugins/elf/symbols.c                 | 12 ++++++++++--
 plugins/pychrysalide/arch/immediate.c |  9 +++++++++
 src/analysis/binary.c                 |  1 +
 src/analysis/db/certs.c               |  2 ++
 src/analysis/db/item.c                |  6 ++++++
 src/analysis/db/misc/rlestr.c         |  3 +--
 src/analysis/db/server.c              | 24 +++++++++++++++++------
 src/analysis/disass/output.c          |  5 ++---
 src/arch/post.c                       |  1 +
 src/arch/raw.c                        |  6 ++++++
 src/arch/undefined.c                  |  1 +
 src/common/endianness.c               |  3 +++
 src/debug/break.c                     |  2 ++
 src/debug/gdbrsp/utils.c              |  5 ++++-
 src/format/dwarf/symbols.c            |  2 +-
 src/glibext/gbufferline.c             |  2 ++
 src/glibext/linesegment.c             |  6 +++---
 src/gui/dialogs/shellcode.c           |  2 +-
 src/gui/panels/errors.c               | 16 +++++++++++++++
 src/gui/panels/symbols.c              |  5 +++++
 tools/d2c/encoding.c                  | 37 ++++++++++++-----------------------
 tools/d2c/syntax.c                    |  6 ++++++
 24 files changed, 122 insertions(+), 46 deletions(-)

diff --git a/plugins/arm/instruction.c b/plugins/arm/instruction.c
index 3a7af7f..ae9721a 100644
--- a/plugins/arm/instruction.c
+++ b/plugins/arm/instruction.c
@@ -24,6 +24,7 @@
 #include "instruction.h"
 
 
+#include <assert.h>
 #include <malloc.h>
 #include <string.h>
 
@@ -242,6 +243,12 @@ bool g_arm_instruction_set_cond(GArmInstruction *instr, ArmCondCode cond)
         case ACC_LE: suffix = "le"; break;
         case ACC_AL: suffix = NULL; break;
         case ACC_NV: suffix = "nv"; break;
+
+        default:    /* Pour GCC... */
+            assert(false);
+            suffix = NULL;
+            break;
+
     }
 
     if (suffix != NULL)
diff --git a/plugins/arm/v7/processor.c b/plugins/arm/v7/processor.c
index 5bbe808..0203f32 100644
--- a/plugins/arm/v7/processor.c
+++ b/plugins/arm/v7/processor.c
@@ -281,8 +281,9 @@ static GArchInstruction *g_armv7_processor_disassemble(const GArmV7Processor *pr
 
             break;
 
-        default:
-            assert(0);
+        default:    /* Pour GCC... */
+            assert(false);
+            result = NULL;
             break;
 
     }
diff --git a/plugins/elf/symbols.c b/plugins/elf/symbols.c
index 315d003..8c40ae4 100644
--- a/plugins/elf/symbols.c
+++ b/plugins/elf/symbols.c
@@ -494,7 +494,11 @@ static bool do_elf_symbol_loading(GElfLoading *loading, GElfFormat *format, bool
         case STT_OBJECT:
 
             name = g_elf_loading_build_name(loading, index, virt, "obj_", alt_name, &addr);
-            if (name == NULL) break;
+            if (name == NULL)
+            {
+                symbol = NULL;
+                break;
+            }
 
             init_mrange(&range, &addr, ELF_SYM(format, sym, st_size));
 
@@ -515,7 +519,11 @@ static bool do_elf_symbol_loading(GElfLoading *loading, GElfFormat *format, bool
             /* Constitution d'une routine */
 
             name = g_elf_loading_build_name(loading, index, virt, "func_", alt_name, &addr);
-            if (name == NULL) break;
+            if (name == NULL)
+            {
+                symbol = NULL;
+                break;
+            }
 
             routine = try_to_demangle_routine(name);
             symbol = G_BIN_SYMBOL(routine);
diff --git a/plugins/pychrysalide/arch/immediate.c b/plugins/pychrysalide/arch/immediate.c
index f1ec125..794571d 100644
--- a/plugins/pychrysalide/arch/immediate.c
+++ b/plugins/pychrysalide/arch/immediate.c
@@ -25,6 +25,7 @@
 #include "immediate.h"
 
 
+#include <assert.h>
 #include <pygobject.h>
 
 
@@ -181,6 +182,14 @@ static PyObject *py_imm_operand_get_value(PyObject *self, void *closure)
             g_imm_operand_get_value(operand, size, &sval64);
             result = PyLong_FromLongLong(sval64);
             break;
+
+        /* Pour GCC... */
+        default:
+            assert(false);
+            result = Py_None;
+            Py_INCREF(result);
+            break;
+
     }
 
     return result;
diff --git a/src/analysis/binary.c b/src/analysis/binary.c
index 1a93470..606b753 100644
--- a/src/analysis/binary.c
+++ b/src/analysis/binary.c
@@ -1838,6 +1838,7 @@ static GtkWidget *g_loaded_binary_build_view(GLoadedBinary *binary, unsigned int
 
         default:
             assert(false);
+            display = NULL;
             break;
     }
 
diff --git a/src/analysis/db/certs.c b/src/analysis/db/certs.c
index 083ef7d..6b8037b 100644
--- a/src/analysis/db/certs.c
+++ b/src/analysis/db/certs.c
@@ -192,6 +192,8 @@ static RSA *generate_rsa_key(unsigned int bits, unsigned long e)
     BIGNUM *bne;                            /* Autre version de l'exposant */
     int ret;                                /* Bilan d'un appel            */
 
+    result = NULL;
+
     bne = BN_new();
     if (bne == NULL)
     {
diff --git a/src/analysis/db/item.c b/src/analysis/db/item.c
index d2c1652..e16ce56 100644
--- a/src/analysis/db/item.c
+++ b/src/analysis/db/item.c
@@ -117,10 +117,16 @@ static void g_db_item_class_init(GDbItemClass *klass)
 static void g_db_item_init(GDbItem *item)
 {
     const char *author;                     /* Identification à diffuser   */
+#ifndef NDEBUG
     bool status;                            /* Bilan d'une obtention       */
+#endif
 
+#ifndef NDEBUG
     status = g_generic_config_get_value(get_main_configuration(), MPK_AUTHOR_NAME, &author);
     assert(status);
+#else
+    g_generic_config_get_value(get_main_configuration(), MPK_AUTHOR_NAME, &author);
+#endif
 
     set_static_rle_string(&item->author, author);
 
diff --git a/src/analysis/db/misc/rlestr.c b/src/analysis/db/misc/rlestr.c
index c1d2d95..43bbac4 100644
--- a/src/analysis/db/misc/rlestr.c
+++ b/src/analysis/db/misc/rlestr.c
@@ -265,8 +265,7 @@ bool unpack_rle_string(rle_string *str, packed_buffer *pbuf)
     bool result;                            /* Bilan à retourner           */
     uint32_t tmp32;                         /* Valeur sur 32 bits          */
 
-    str->data = NULL;
-    str->length = 0;
+    unset_rle_string(str);
 
     result = extract_packed_buffer(pbuf, &tmp32, sizeof(uint32_t), true);
 
diff --git a/src/analysis/db/server.c b/src/analysis/db/server.c
index bbc7415..d0ce62b 100644
--- a/src/analysis/db/server.c
+++ b/src/analysis/db/server.c
@@ -552,6 +552,8 @@ static void *g_db_server_listener(GDbServer *server)
     int ret;                                /* Bilan d'un appel            */
     gen_sockaddr_t peer;                    /* Adresse cliente             */
     int fd;                                 /* Canal établi vers un client */
+    rle_string hash;                        /* Empreinte du binaire visé   */
+    rle_string user;                        /* Nom d'utilisateur du client */
     const char *ip;                         /* Statut de la conversion     */
     char *peer_name;                        /* Désignation du correspondant*/
     DBError error;                          /* Validation de la connexion  */
@@ -560,8 +562,6 @@ static void *g_db_server_listener(GDbServer *server)
     bool status;                            /* Bilan d'une opération       */
     uint32_t cmd;                           /* Commande initiale lue       */
     uint32_t version;                       /* Version du client lue       */
-    rle_string hash;                        /* Empreinte du binaire visé   */
-    rle_string user;                        /* Nom d'utilisateur du client */
     unsigned char sig[RSA_USED_SIZE];       /* Signature effectuée         */
     GList *iter;                            /* Boucle de parcours          */
     packed_buffer out_pbuf;                 /* Tampon d'émission           */
@@ -587,6 +587,11 @@ static void *g_db_server_listener(GDbServer *server)
                 continue;
             }
 
+            /* Initialisation à vide pour les sorties en erreur */
+
+            init_dynamic_rle_string(&hash, NULL);
+            init_dynamic_rle_string(&user, NULL);
+
             /* Construction d'une représentation */
 
             if (*((sa_family_t *)&peer) == AF_UNIX)
@@ -607,6 +612,9 @@ static void *g_db_server_listener(GDbServer *server)
 
             }
 
+            else
+                goto gdsl_invalid;
+
             error = DBE_NONE;
             archive = NULL;
 
@@ -747,13 +755,13 @@ static void *g_db_server_listener(GDbServer *server)
             init_packed_buffer(&out_pbuf);
 
             status = extend_packed_buffer(&out_pbuf, (uint32_t []) { DBC_WELCOME }, sizeof(uint32_t), true);
-            if (!status) goto gdsl_error;
+            if (!status) goto gdsl_out_error;
 
             status = extend_packed_buffer(&out_pbuf, (uint32_t []) { error }, sizeof(uint32_t), true);
-            if (!status) goto gdsl_error;
+            if (!status) goto gdsl_out_error;
 
             status = send_packed_buffer(&out_pbuf, fd);
-            if (!status) goto gdsl_error;
+            if (!status) goto gdsl_out_error;
 
             exit_packed_buffer(&out_pbuf);
 
@@ -781,15 +789,19 @@ static void *g_db_server_listener(GDbServer *server)
 
             assert(error != DBE_NONE);
 
- gdsl_error:
+ gdsl_out_error:
 
             exit_packed_buffer(&out_pbuf);
 
+ gdsl_error:
+
             free(peer_name);
 
             exit_rle_string(&hash);
             exit_rle_string(&user);
 
+ gdsl_invalid:
+
             close(fd);
 
         }
diff --git a/src/analysis/disass/output.c b/src/analysis/disass/output.c
index 19c7de9..a1c0718 100644
--- a/src/analysis/disass/output.c
+++ b/src/analysis/disass/output.c
@@ -206,10 +206,9 @@ void print_disassembled_instructions(GBufferCache *cache, GCodingLanguage *lang,
 
         /* Début d'un nouveau symbole ? */
 
-        if (symbol == NULL)
-            compared = -1;
+        compared = -1;
 
-        else
+        if (symbol != NULL)
         {
             iaddr = get_mrange_addr(g_arch_instruction_get_range(instr));
 
diff --git a/src/arch/post.c b/src/arch/post.c
index f3d1fd6..6462984 100644
--- a/src/arch/post.c
+++ b/src/arch/post.c
@@ -105,6 +105,7 @@ void post_process_target_resolution(GArchInstruction *instr, GArchProcessor *pro
 
                 default:
                     assert(false);
+                    symbol = NULL;
                     break;
 
             }
diff --git a/src/arch/raw.c b/src/arch/raw.c
index e85d865..683d60f 100644
--- a/src/arch/raw.c
+++ b/src/arch/raw.c
@@ -506,7 +506,9 @@ static void g_raw_instruction_print(GRawInstruction *instr, GBufferLine *line, s
     GArchOperand *op;                       /* Opérande à manipuler        */
     GImmOperand *imm;                       /* Version opérande de valeur  */
     char byte;                              /* Octet à afficher (ou pas)   */
+#ifndef NDEBUG
     bool status;                            /* Bilan d'une récupération    */
+#endif
 
     base = G_ARCH_INSTRUCTION(instr);
 
@@ -566,8 +568,12 @@ static void g_raw_instruction_print(GRawInstruction *instr, GBufferLine *line, s
             if (!instr->is_string && g_imm_operand_get_display(imm) != IOD_CHAR)
                 goto grip_fallback;
 
+#ifndef NDEBUG
             status = g_imm_operand_get_value(imm, MDS_8_BITS, &byte);
             assert(status);
+#else
+            g_imm_operand_get_value(imm, MDS_8_BITS, &byte);
+#endif
 
             /* Si le caractère doit apparaître en hexadécimal... */
 
diff --git a/src/arch/undefined.c b/src/arch/undefined.c
index 3c76a09..0ae95d3 100644
--- a/src/arch/undefined.c
+++ b/src/arch/undefined.c
@@ -251,6 +251,7 @@ const char *g_undef_instruction_get_keyword(const GUndefInstruction *instr, AsmS
 
         default:
             assert(false);
+            result = NULL;
             break;
 
     }
diff --git a/src/common/endianness.c b/src/common/endianness.c
index 3aeca00..0304647 100755
--- a/src/common/endianness.c
+++ b/src/common/endianness.c
@@ -97,6 +97,7 @@ uint16_t swap_u16(const uint16_t *value, SourceEndian endian)
 
         default:
             assert(false);
+            result = -1;
             break;
 
     }
@@ -157,6 +158,7 @@ uint32_t swap_u32(const uint32_t *value, SourceEndian endian)
 
         default:
             assert(false);
+            result = -1;
             break;
 
     }
@@ -221,6 +223,7 @@ uint64_t swap_u64(const uint64_t *value, SourceEndian endian)
 
         default:
             assert(false);
+            result = -1;
             break;
 
     }
diff --git a/src/debug/break.c b/src/debug/break.c
index 1d4c2d3..fac3f08 100644
--- a/src/debug/break.c
+++ b/src/debug/break.c
@@ -124,6 +124,8 @@ virt_t get_raw_breakpoint_prev_addr(const raw_breakpoint *bp)
 
         default:
 
+            result = VMPA_NO_VIRTUAL;
+
             found = false;
 
             for (i = 0; i < bp->count && !found; i++)
diff --git a/src/debug/gdbrsp/utils.c b/src/debug/gdbrsp/utils.c
index 8c4cb8a..f1f1c85 100644
--- a/src/debug/gdbrsp/utils.c
+++ b/src/debug/gdbrsp/utils.c
@@ -85,7 +85,7 @@ bool read_fixed_byte(const char *data, size_t len, uint8_t *byte)
 
     len = MIN(2, len);
 
-    for (i = 0, iter = data; i < len && result; i++, iter++)
+    for (i = 0, iter = data; i < len; i++, iter++)
     {
         switch (*iter)
         {
@@ -107,6 +107,9 @@ bool read_fixed_byte(const char *data, size_t len, uint8_t *byte)
 
         }
 
+        if (!result)
+            break;
+
         if (i == 0)
             *byte = (nibble << 4);
         else
diff --git a/src/format/dwarf/symbols.c b/src/format/dwarf/symbols.c
index da30816..20ec7ea 100644
--- a/src/format/dwarf/symbols.c
+++ b/src/format/dwarf/symbols.c
@@ -231,7 +231,7 @@ static bool load_object_as_symbol_from_dwarf(GDwarfFormat *format, const dw_die
 
     //printf(" --> [valid ?= %d] start @ 0x%08llx\n", status, virt);
     //printf(" --> [valid ?= %d]   len = 0x%08llx\n", status, len);
-    printf(" --> [valid ?= %d]  name = '%s'\n", status, name);
+    //printf(" --> [valid ?= %d]  name = '%s'\n", status, name);
 
 
     return true;
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c
index d8ed7ed..9d2ec51 100644
--- a/src/glibext/gbufferline.c
+++ b/src/glibext/gbufferline.c
@@ -1273,6 +1273,8 @@ const line_segment *g_buffer_line_get_segment_at(const GBufferLine *line, const
 
     if (status)
         result = g_buffer_line_get_segment_from_coord(line, &coord);
+    else
+        result = NULL;
 
     return result;
 
diff --git a/src/glibext/linesegment.c b/src/glibext/linesegment.c
index 47ad9cc..e802dda 100644
--- a/src/glibext/linesegment.c
+++ b/src/glibext/linesegment.c
@@ -860,13 +860,13 @@ void draw_line_segment(const line_segment *segment, cairo_t *cr, gint *x, gint y
     cairo_operator_t old;                   /* Sauvegarde avant changement */
     const rendering_color_t *used_fg;       /* Couleur d'impression utile  */
 
-    if (segment->text[0] == '\t' && segment->text[1] == '\0')
-        goto small_sep;
-
     selected = selection_list_has_segment_content(list, segment);
 
     width = get_line_segment_width(segment);
 
+    if (segment->text[0] == '\t' && segment->text[1] == '\0')
+        goto small_sep;
+
     /* Fond du texte */
     if (selected)
     {
diff --git a/src/gui/dialogs/shellcode.c b/src/gui/dialogs/shellcode.c
index 8e4a205..68ce1f4 100644
--- a/src/gui/dialogs/shellcode.c
+++ b/src/gui/dialogs/shellcode.c
@@ -192,7 +192,7 @@ static void export_assistant_close(GtkAssistant *assistant, GObject *ref)
     GtkEntry *entry;                        /* Zone de saisie              */
     const gchar *filename;                  /* Chemin d'accès du fichier   */
 
-    //binary = G_LOADED_BINARY(g_object_get_data(ref, "binary"));
+    binary = NULL;//G_LOADED_BINARY(g_object_get_data(ref, "binary"));
 
     format = g_loaded_binary_get_format(binary);
     options = g_rendering_options_new(format);
diff --git a/src/gui/panels/errors.c b/src/gui/panels/errors.c
index afe0283..b4be9ad 100644
--- a/src/gui/panels/errors.c
+++ b/src/gui/panels/errors.c
@@ -562,6 +562,17 @@ static void update_error_panel(const GErrorPanel *panel, GtkStatusStack *status,
 
     }
 
+    else
+    {
+        /* Pour GCC... */
+        format = NULL;
+        proc = NULL;
+
+        fcount = 0;
+        pcount = 0;
+
+    }
+
     /* S'il n'y a aucun soucis à remonter... */
 
     if (panel->binary == NULL || (fcount + pcount) == 0)
@@ -1026,6 +1037,11 @@ static const char *g_error_panel_setup(const GErrorPanel *panel, unsigned int ui
 
             break;
 
+        default:    /* Pour GCC... */
+            assert(false);
+            result = "";
+            break;
+
     }
 
     return result;
diff --git a/src/gui/panels/symbols.c b/src/gui/panels/symbols.c
index d1e60fc..f016199 100644
--- a/src/gui/panels/symbols.c
+++ b/src/gui/panels/symbols.c
@@ -1550,6 +1550,11 @@ static const char *g_symbols_panel_setup(const GSymbolsPanel *panel, unsigned in
 
             break;
 
+        default:    /* Pour GCC... */
+            assert(false);
+            result = "";
+            break;
+
     }
 
     /* Mémorisation de tous les noeuds ouverts */
diff --git a/tools/d2c/encoding.c b/tools/d2c/encoding.c
index 052fc04..3f0ec64 100644
--- a/tools/d2c/encoding.c
+++ b/tools/d2c/encoding.c
@@ -325,37 +325,13 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
     bool openbar;                           /* Syntaxe unique par défaut ? */
     disass_assert *dassert;                 /* Eventuelles conditions      */
     size_t i;                               /* Boucle de parcours          */
-
-
-
-
-
-
     bool op_decl;                           /* Suivi des déclaration #1    */
     bool imm_decl;                          /* Suivi des déclaration #2    */
-
     bool bad_exit;                          /* Ajout d'une sortie d'échec ?*/
     bool quick_exit;                        /* Inclusion de sortie rapide ?*/
-
-
-
     char *encoding_fc;                      /* Spécification d'encodage    */
     char *cast;                             /* Conversion vers le format   */
 
-
-
-    /***************
-     *
-     *
-     * REAL ONE
-     *
-     *
-     *
-     **********************/
-
-
-
-
     result = true;
 
     /* Détermination de la forme du code */
@@ -418,6 +394,14 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
 
     dprintf(fd, "\n");
 
+    /* Initialisation du resultat d'un point de vue global */
+
+    if (!openbar)
+    {
+        dprintf(fd, "\tresult = NULL;\n");
+        dprintf(fd, "\n");
+    }
+
     /* Définition des champs bruts */
 
     result = define_used_bits_fields(spec->bits, fd);
@@ -435,7 +419,10 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
 
     cast = build_cast_if_needed(encoding_fc);
 
-    dprintf(fd, "\t%s(%s(result), \"%s\");\n", encoding_fc, cast, spec->prefix);
+    if (!openbar)
+        dprintf(fd, "\tif (result != NULL)\n");
+
+    dprintf(fd, "\t%s%s(%s(result), \"%s\");\n", openbar ? "" : "\t", encoding_fc, cast, spec->prefix);
 
     free(cast);
 
diff --git a/tools/d2c/syntax.c b/tools/d2c/syntax.c
index c0842a7..de1d693 100644
--- a/tools/d2c/syntax.c
+++ b/tools/d2c/syntax.c
@@ -284,6 +284,12 @@ bool write_encoding_syntax(const encoding_syntax *syntax, int fd, const char *ar
 
     }
 
+    if (!alone)
+    {
+        dprintf(fd, "\t%sassert(result == NULL);\n", tab);
+        dprintf(fd, "\n");
+    }
+
     dprintf(fd, "\t%sresult = g_%s_instruction_new(\"%s\");\n",
             tab, arch, get_keyword_from_asm_pattern(syntax->pattern));
 
-- 
cgit v0.11.2-87-g4458