Use asserts in pj api to catch this issue earlier ##json

This commit is contained in:
pancake 2019-06-21 20:39:12 +02:00 committed by radare
parent 64b97c2113
commit e0572e0d02
2 changed files with 49 additions and 62 deletions

View File

@ -6377,7 +6377,7 @@ static bool cmd_anal_refs(RCore *core, const char *input) {
}
free (res);
free (res1);
free (name);
R_FREE (name);
r_anal_var_free (var);
r_list_free (list);
r_list_free (list1);

View File

@ -4,21 +4,21 @@
#include <r_util/r_print.h>
static void pj_raw(PJ *j, const char *msg) {
if (j && msg && *msg) {
r_return_if_fail (j && msg);
if (*msg) {
r_strbuf_append (j->sb, msg);
}
}
static void pj_comma(PJ *j) {
if (j) {
if (!j->is_key) {
if (!j->is_first) {
pj_raw (j, ",");
}
r_return_if_fail (j);
if (!j->is_key) {
if (!j->is_first) {
pj_raw (j, ",");
}
j->is_first = false;
j->is_key = false;
}
j->is_first = false;
j->is_key = false;
}
R_API PJ *pj_new() {
@ -38,14 +38,11 @@ R_API void pj_free(PJ *pj) {
}
R_API char *pj_drain(PJ *pj) {
if (pj) {
r_return_val_if_fail (pj->level == 0, NULL);
char *res = r_strbuf_drain (pj->sb);
pj->sb = NULL;
free (pj);
return res;
}
return NULL;
r_return_val_if_fail (pj && pj->level == 0, NULL);
char *res = r_strbuf_drain (pj->sb);
pj->sb = NULL;
free (pj);
return res;
}
R_API const char *pj_string(PJ *j) {
@ -67,23 +64,19 @@ static PJ *pj_begin(PJ *j, char type) {
}
R_API PJ *pj_o(PJ *j) {
if (j) {
pj_comma (j);
return pj_begin (j, '{');
}
return j;
r_return_val_if_fail (j, NULL);
pj_comma (j);
return pj_begin (j, '{');
}
R_API PJ *pj_a(PJ *j) {
if (j) {
pj_comma (j);
return pj_begin (j, '[');
}
return j;
r_return_val_if_fail (j, j);
pj_comma (j);
return pj_begin (j, '[');
}
R_API PJ *pj_end(PJ *j) {
r_return_val_if_fail (j && j->level > 0, NULL);
r_return_val_if_fail (j && j->level > 0, j);
if (--j->level < 1) {
char msg[2] = { j->braces[j->level], 0 };
pj_raw (j, msg);
@ -107,10 +100,9 @@ R_API PJ *pj_k(PJ *j, const char *k) {
}
R_API PJ *pj_kn(PJ *j, const char *k, ut64 n) {
if (j && k) {
pj_k (j, k);
pj_n (j, n);
}
r_return_val_if_fail (j && k, NULL);
pj_k (j, k);
pj_n (j, n);
return j;
}
@ -123,30 +115,28 @@ R_API PJ *pj_kN(PJ *j, const char *k, st64 n) {
}
R_API PJ *pj_kd(PJ *j, const char *k, double d) {
if (j && k) {
pj_k (j, k);
pj_d (j, d);
}
r_return_val_if_fail (j && k, NULL);
pj_k (j, k);
pj_d (j, d);
return j;
}
R_API PJ *pj_kf(PJ *j, const char *k, float d) {
if (j && k) {
pj_k (j, k);
pj_f (j, d);
}
r_return_val_if_fail (j && k, NULL);
pj_k (j, k);
pj_f (j, d);
return j;
}
R_API PJ *pj_ki(PJ *j, const char *k, int i) {
if (j && k) {
pj_k (j, k);
pj_i (j, i);
}
r_return_val_if_fail (j && k, NULL);
pj_k (j, k);
pj_i (j, i);
return j;
}
R_API PJ *pj_ks(PJ *j, const char *k, const char *v) {
if (j && k && v && *v) {
r_return_val_if_fail (j && k && v, NULL);
if (*k && *v) {
pj_k (j, k);
pj_s (j, v);
}
@ -154,32 +144,29 @@ R_API PJ *pj_ks(PJ *j, const char *k, const char *v) {
}
R_API PJ *pj_kb(PJ *j, const char *k, bool v) {
if (j && k) {
pj_k (j, k);
pj_b (j, v);
}
r_return_val_if_fail (j && k, NULL);
pj_k (j, k);
pj_b (j, v);
return j;
}
R_API PJ *pj_b(PJ *j, bool v) {
if (j) {
pj_comma (j);
pj_raw (j, r_str_bool (v));
}
r_return_val_if_fail (j, NULL);
pj_comma (j);
pj_raw (j, r_str_bool (v));
return j;
}
R_API PJ *pj_s(PJ *j, const char *k) {
if (j && k) {
pj_comma (j);
pj_raw (j, "\"");
char *ek = r_str_escape_utf8_for_json (k, -1);
if (ek) {
pj_raw (j, ek);
free (ek);
}
pj_raw (j, "\"");
r_return_val_if_fail (j && k, j);
pj_comma (j);
pj_raw (j, "\"");
char *ek = r_str_escape_utf8_for_json (k, -1);
if (ek) {
pj_raw (j, ek);
free (ek);
}
pj_raw (j, "\"");
return j;
}