From b024097205073a3bb1d9fe5ce6fb69dff1a5204a Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Wed, 27 May 2020 09:45:59 +0200
Subject: [PATCH] Correct segfault

---
 inc/lektor/reg.h |  4 ++--
 src/reg.c        | 12 ++++++------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/inc/lektor/reg.h b/inc/lektor/reg.h
index e0428f91..8d4e1e20 100644
--- a/inc/lektor/reg.h
+++ b/inc/lektor/reg.h
@@ -14,7 +14,7 @@ struct module_reg {
     const char *name;
     union {
         reg_func func;
-        struct module_reg *obj;
+        struct module_reg **obj; /* First item of the array */
     };
 };
 
@@ -29,7 +29,7 @@ struct lkt_module {
 #define REG_BEGIN(reg)      struct module_reg reg[] = {
 #define REG_ADD(f)          { .name = #f,   .func = f    },
 #define REG_ADD_NAMED(n, f) { .name = n,    .func = f    },
-#define REG_REGISTER(n, s)  { .name = n,    .obj  = s    },
+#define REG_REGISTER(n, s)  { .name = n,    .obj  = &s   },
 #define REG_END()           { .name = NULL, .func = NULL } };
 #define REG_DEFINE(reg)     struct module_reg reg* = NULL;
 
diff --git a/src/reg.c b/src/reg.c
index 91b44a10..8d421eea 100644
--- a/src/reg.c
+++ b/src/reg.c
@@ -24,9 +24,9 @@ void *
 __reg_get(struct module_reg *reg, const char *name)
 {
     int i;
-    for (i = 0; reg[i].name && reg[i].obj; ++i) {
-        if (STR_MATCH(reg[i].name, name))
-            return reg[i].obj;
+    for (i = 0; (reg + i)->name && (reg + i)->obj; ++i) {
+        if (STR_MATCH((reg + i)->name, name))
+            return (reg + i)->obj;
     }
     return NULL;
 }
@@ -35,9 +35,9 @@ reg_func
 __reg_func(struct module_reg *reg, const char *name)
 {
     int i;
-    for (i = 0; reg[i].name && reg[i].func; ++i) {
-        if (STR_MATCH(reg[i].name, name))
-            return reg[i].func;
+    for (i = 0; (reg + i)->name && (reg + i)->func; ++i) {
+        if (STR_MATCH((reg + i)->name, name))
+            return (reg + i)->func;
     }
     return NULL;
 }
-- 
GitLab