json: avoid stack allocation of long strings in a recursive function

Fixes: oss-fuzz#10908

https://oss-fuzz.com/v2/testcase-detail/5639441482252288
This commit is contained in:
Lennart Poettering 2018-10-12 14:42:43 +02:00
parent 92853e9bbe
commit 4ae7e4e5d8
1 changed files with 12 additions and 2 deletions

View File

@ -1344,10 +1344,15 @@ static int json_format(FILE *f, JsonVariant *v, unsigned flags, const char *pref
if (n == 0)
fputs("[]", f);
else {
_cleanup_free_ char *joined = NULL;
const char *prefix2;
if (flags & JSON_FORMAT_PRETTY) {
prefix2 = strjoina(strempty(prefix), "\t");
joined = strjoin(strempty(prefix), "\t");
if (!joined)
return -ENOMEM;
prefix2 = joined;
fputs("[\n", f);
} else {
prefix2 = strempty(prefix);
@ -1395,10 +1400,15 @@ static int json_format(FILE *f, JsonVariant *v, unsigned flags, const char *pref
if (n == 0)
fputs("{}", f);
else {
_cleanup_free_ char *joined = NULL;
const char *prefix2;
if (flags & JSON_FORMAT_PRETTY) {
prefix2 = strjoina(strempty(prefix), "\t");
joined = strjoin(strempty(prefix), "\t");
if (!joined)
return -ENOMEM;
prefix2 = joined;
fputs("{\n", f);
} else {
prefix2 = strempty(prefix);