--- libelwix/src/json.c 2024/10/26 14:56:14 1.9.34.2 +++ libelwix/src/json.c 2024/10/27 03:57:34 1.9.34.3 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: json.c,v 1.9.34.2 2024/10/26 14:56:14 misho Exp $ +* $Id: json.c,v 1.9.34.3 2024/10/27 03:57:34 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -602,7 +602,7 @@ json_findbypos(u_long pos, jtok_t * __restrict toks, i jtok_t *tok = NULL; register int i; - if (toks) + if (!toks) return NULL; for (i = 1; i < toksnum; i++) @@ -645,13 +645,21 @@ json_token2array(const char *jstr, jtok_t * __restrict if (tok->tok_type == J_STRING || tok->tok_type == J_VALUE) { v = ait_getVars(&arr, 0); AIT_SET_STRSIZ(v, json_toklen(tok) + 1); - json_tokstrcpy(AIT_GET_STR(v), jstr, tok); + if (AIT_GET_STR(v)) { + json_tokstrcpy(AIT_GET_STR(v), jstr, tok); + } else { + ait_freeVar(&v); + } } else if (tok->tok_type == J_ARRAY) { for (i = 0, j = 1; i < tok->tok_size; i++) { t = &tok[i + j]; v = ait_getVars(&arr, i); AIT_SET_STRSIZ(v, json_toklen(t) + 1); - json_tokstrcpy(AIT_GET_STR(v), jstr, t); + if (AIT_GET_STR(v)) { + json_tokstrcpy(AIT_GET_STR(v), jstr, t); + } else { + ait_freeVar(&v); + } /* if there we have array from objects should parse all object tokens */ while (i < tok->tok_size - 1 && tok->tok_idx != tok[i + j + 1].tok_parent) @@ -662,7 +670,11 @@ json_token2array(const char *jstr, jtok_t * __restrict t = &tok[i + 1]; v = ait_getVars(&arr, i); AIT_SET_STRSIZ(v, json_toklen(t) + 1); - json_tokstrcpy(AIT_GET_STR(v), jstr, t); + if (AIT_GET_STR(v)) { + json_tokstrcpy(AIT_GET_STR(v), jstr, t); + } else { + ait_freeVar(&v); + } } } else { elwix_SetErr(J_ERR_PARAM, "%s", jerrstr[J_ERR_PARAM]); @@ -1144,7 +1156,7 @@ json_dump_yaml(FILE *f, const char *jstr, jtok_t *toks { register int i, j, k; - if (!toksnum) + if (!toksnum || !toks) return 0; if (toks->tok_type == J_VALUE) {