From 2e05c8229ec03f9d33cffe6c286eabe242977230 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Thu, 17 Feb 2022 21:05:46 +0100
Subject: [PATCH] FIX: Change the checks in reg {get,func} to not SEGV when the
 register don't have the asked module

---
 src/base/reg.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/base/reg.c b/src/base/reg.c
index 7ccdccbf..d02577c4 100644
--- a/src/base/reg.c
+++ b/src/base/reg.c
@@ -22,8 +22,7 @@ reg_global(struct module_reg **reg_ptr)
 PRIVATE_FUNCTION void *
 __reg_get(struct module_reg *reg, const char *name)
 {
-    int i;
-    for (i = 0; (reg + i)->name && (reg + i)->obj; ++i) {
+    for (int i = 0; (reg + i) && (reg + i)->name && (reg + i)->obj; ++i) {
         if (STR_MATCH((reg + i)->name, name))
             return (reg + i)->obj;
     }
@@ -33,8 +32,7 @@ __reg_get(struct module_reg *reg, const char *name)
 PRIVATE_FUNCTION reg_func
 __reg_func(struct module_reg *reg, const char *name)
 {
-    int i;
-    for (i = 0; (reg + i)->name && (reg + i)->func; ++i) {
+    for (int i = 0; (reg + i) && (reg + i)->name && (reg + i)->func; ++i) {
         if (STR_MATCH((reg + i)->name, name))
             return (reg + i)->func;
     }
@@ -44,8 +42,9 @@ __reg_func(struct module_reg *reg, const char *name)
 PRIVATE_FUNCTION void *
 __from_file(const char *file, void **handle, const char *symbol)
 {
-    char *error;
-    *handle = dlopen(file, RTLD_NOW);
+    void *sym   = NULL;
+    char *error = NULL;
+    *handle     = dlopen(file, RTLD_NOW);
 
     if (NULL == *handle) {
         LOG_ERROR("REG", "libdl error in dlopen on file '%s': %s", file, dlerror());
@@ -53,9 +52,10 @@ __from_file(const char *file, void **handle, const char *symbol)
     }
 
     dlerror();
-    void *sym = dlsym(*handle, symbol);
+    sym   = dlsym(*handle, symbol);
+    error = dlerror();
 
-    if ((error = dlerror()) != NULL) {
+    if (error != NULL) {
         LOG_ERROR("REG", "libdl error in dlsym on file '%s': %s\n", file, error);
         return NULL;
     }
-- 
GitLab