diff --git a/src/base/json.c b/src/base/json.c
index 700ef60a0a0f9457f2893b254157dcca339625d9..4a16254e4b27a53626633c2ecbeb0b9e6c33c5da 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 */