From 2a1d0875ca13d4b1b1d12da88400a9ff64af5b28 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Fri, 29 Oct 2021 16:54:46 +0200
Subject: [PATCH] BUILD: Try to fix the -Werror=conversion returned from gcc
 (see CI)

---
 src/base/json.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/base/json.c b/src/base/json.c
index 700ef60a..4a16254e 100644
--- a/src/base/json.c
+++ b/src/base/json.c
@@ -194,7 +194,7 @@ LKT_IGNORE_WARN_FMT_SECURITY
 int
 json_parse(const char *str, int asked_level, json_parse_callback call, void *user)
 {
-    int level = 0;
+    int64_t level = 0;
     char key[LKT_LINE_MAX];
     char val[LKT_LINE_MAX];
     char tmp[LKT_LINE_MAX];
@@ -205,7 +205,9 @@ json_parse(const char *str, int asked_level, json_parse_callback call, void *use
 
         /* Begin of a block */
         if ((len = strspn(str, __JSON_BEGIN))) {
-            level += len;
+            if (len >= INT64_MAX)
+                return 1; /* Json error */
+            level += (int64_t)len;
             str += len;
         }
 
@@ -213,8 +215,10 @@ json_parse(const char *str, int asked_level, json_parse_callback call, void *use
         else if ((len = strspn(str, __JSON_END))) {
             if ((level == asked_level) && call(NULL, NULL, 1, user) != 0)
                 return 2;
+            if (len >= INT64_MAX)
+                return 1; /* Json error */
             str += len;
-            level -= len;
+            level -= (int64_t)len;
         }
 
         /* Key Value */
@@ -241,8 +245,8 @@ LKT_POP
 int
 json_parse_get_count(const char *str, int asked_level)
 {
-    int level   = 0;
-    int ret_len = 0;
+    int64_t level = 0;
+    int ret_len   = 0;
 
     for (;;) {
         size_t len = 0;
@@ -250,15 +254,19 @@ json_parse_get_count(const char *str, int asked_level)
 
         /* Begin of a block */
         if ((len = strspn(str, __JSON_BEGIN))) {
-            level += len;
+            if (len >= INT64_MAX)
+                return 1; /* Json error */
+            level += (int64_t)len;
             str += len;
         }
 
         /* End of a block */
         else if ((len = strspn(str, __JSON_END))) {
+            if (len >= INT64_MAX)
+                return 1; /* Json error */
             ret_len += (level == asked_level);
             str += len;
-            level -= len;
+            level -= (int64_t)len;
         }
 
         /* Key Value */
-- 
GitLab