summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2019-02-09 14:57:46 +0000
committerJeremy Harris <jgh146exb@wizmail.org>2019-02-09 15:25:54 +0000
commit9f497717cbb7ffea60b235da3e10a7b42bda41ac (patch)
tree3316866133b839a0f0286162e1111d40ae6f799f /src
parentf3c73adaa541ae54092467a29668ac32894ef1dc (diff)
JSON: fix crashes in ${extract jsons } and ${extract json {digits} }
Broken-by: 386ab6457b and 8fdf20fd84
Diffstat (limited to 'src')
-rw-r--r--src/src/expand.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/src/expand.c b/src/src/expand.c
index ec5660adb..aa4d0289e 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -5811,10 +5811,11 @@ while (*s != 0)
}
while (field_number > 0 && (item = json_nextinlist(&list)))
field_number--;
- s = item;
- lookup_value = s;
- while (*s) s++;
- while (--s >= lookup_value && isspace(*s)) *s = '\0';
+ if ((lookup_value = s = item))
+ {
+ while (*s) s++;
+ while (--s >= lookup_value && isspace(*s)) *s = '\0';
+ }
}
else
{
@@ -5850,14 +5851,16 @@ while (*s != 0)
}
}
- if (fmt == extract_jsons)
- if (!(lookup_value = dewrap(lookup_value, US"\"\"")))
- {
- expand_string_message =
- string_sprintf("%s wrapping string result for extract jsons",
- expand_string_message);
- goto EXPAND_FAILED_CURLY;
- }
+ if ( fmt == extract_jsons
+ && lookup_value
+ && !(lookup_value = dewrap(lookup_value, US"\"\"")))
+ {
+ expand_string_message =
+ string_sprintf("%s wrapping string result for extract jsons",
+ expand_string_message);
+ goto EXPAND_FAILED_CURLY;
+ }
+ break; /* json/s */
}
/* If no string follows, $value gets substituted; otherwise there can