--- libelwix/src/json.c 2018/06/26 14:39:13 1.7 +++ libelwix/src/json.c 2019/09/24 15:49:52 1.8 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: json.c,v 1.7 2018/06/26 14:39:13 misho Exp $ +* $Id: json.c,v 1.8 2019/09/24 15:49:52 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004 - 2018 +Copyright 2004 - 2019 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -224,7 +224,7 @@ json_parse_value(json_t * __restrict json, const char case '}': goto found; } - if (jstr[json->h_pos] < 32 || jstr[json->h_pos] > 127) { + if (jstr[json->h_pos] < 32 || (u_char) jstr[json->h_pos] > 127) { json->h_pos = pos; elwix_SetErr(J_ERR_INVAL, "%s", jerrstr[J_ERR_INVAL]); return -1; @@ -442,19 +442,25 @@ json_token2val(const char *jstr, jtok_t * __restrict t char * json_token2str(const char *jstr, jtok_t * __restrict tok) { - char *str = NULL; + char *s, *s2, *wrk, *str = NULL; size_t len; if (!jstr || !tok) return NULL; + len = json_toklen(tok); str = e_malloc(len + 1); if (!str) return NULL; else { - strncpy(str, json_tokstr(jstr, tok), len); - str[len] = 0; + memset(str, 0, len + 1); + + wrk = e_strdup(json_tokstr(jstr, tok)); + wrk[len] = 0; + for (s = wrk, s2 = str; *s; s++) + *s2++ = (*s != '\\') ? *s : *++s; + e_free(wrk); } return str;