From 94efb7bf5239cf984a0dda9949a26719a8ae2090 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Tue, 30 Nov 2021 03:17:31 +0100
Subject: Ensure the processor is known when providing the content class.

---
 src/analysis/binary.c | 56 +++++++++++++++++++++++++++++----------------------
 1 file changed, 32 insertions(+), 24 deletions(-)

diff --git a/src/analysis/binary.c b/src/analysis/binary.c
index 9c3b3b9..141fac2 100644
--- a/src/analysis/binary.c
+++ b/src/analysis/binary.c
@@ -356,11 +356,39 @@ static void g_loaded_binary_finalize(GLoadedBinary *binary)
 GLoadedContent *g_loaded_binary_new(GExeFormat *format)
 {
     GLoadedBinary *result;                  /* Adresse à retourner         */
+    const char *arch;                       /* Architecture d'exécution    */
+    GArchProcessor *proc;                   /* Architecture du binaire     */
+
+    result = NULL;
+
+    /* Architecture visée */
+
+    arch = g_exe_format_get_target_machine(format);
+
+    if (arch == NULL)
+    {
+        log_simple_message(LMT_INFO, _("Unknown architecture"));
+        goto exit;
+    }
+
+    proc = get_arch_processor_for_key(arch);
+
+    if (proc == NULL)
+    {
+        log_variadic_message(LMT_ERROR, _("Unable to load the required processor (%s)"), arch);
+        goto exit;
+    }
+
+    /* Mise en place complète */
 
     result = g_object_new(G_TYPE_LOADED_BINARY, NULL);
 
     result->format = format;
 
+    result->proc = proc;
+
+ exit:
+
     return G_LOADED_CONTENT(result);
 
 }
@@ -1435,7 +1463,6 @@ static bool g_loaded_binary_analyze(GLoadedBinary *binary, bool connect, bool ca
 {
     bool result;                            /* Bilan à retourner           */
     GBinFormat *format;                     /* Format lié au binaire       */
-    const char *arch;                       /* Architecture d'exécution    */
     char *desc;                             /* Description humaine associée*/
     bool has_virt;                          /* Présence de virtuel ?       */
     GProcContext *context;                  /* Contexte de suivi dédié     */
@@ -1446,38 +1473,19 @@ static bool g_loaded_binary_analyze(GLoadedBinary *binary, bool connect, bool ca
     format = G_BIN_FORMAT(binary->format);
 
     desc = g_known_format_get_description(G_KNOWN_FORMAT(format));
+    assert(desc != NULL);
 
-    if (desc == NULL)
-        log_simple_message(LMT_WARNING, _("Unnamed format"));
-    else
-        log_variadic_message(LMT_INFO, _("Selected format: %s"), desc);
+    log_variadic_message(LMT_INFO, _("Selected format: %s"), desc);
 
     free(desc);
 
     result = g_known_format_analyze(G_KNOWN_FORMAT(format), gid, status);
     if (!result) goto glba_exit;
 
-    /* Architecture visée */
-
-    arch = g_exe_format_get_target_machine(binary->format);
-
-    if (arch == NULL)
-    {
-        log_simple_message(LMT_INFO, _("Unknown architecture"));
-        result = false;
-        goto glba_exit;
-    }
-
-    binary->proc = get_arch_processor_for_key(arch);
-
-    if (binary->proc == NULL)
-    {
-        log_variadic_message(LMT_ERROR, _("Unable to load the required processor (%s)"), arch);
-        result = false;
-        goto glba_exit;
-    }
+    /* Interprétation de l'architecture associée */
 
     desc = g_arch_processor_get_desc(binary->proc);
+    assert(desc != NULL);
 
     log_variadic_message(LMT_INFO, _("Detected architecture: %s"), desc);
 
-- 
cgit v0.11.2-87-g4458