mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-21 21:25:25 +00:00
json: do not call json_tokener_free with NULL
Add an error message for the rare case if json_tokener_new fails (allocation failure) and guard any use of json_tokener_free where tok might be NULL (this was possible in libvirt-nss when the json file could not be opened). https://gitlab.com/libvirt/libvirt/-/issues/581 Signed-off-by: Ján Tomko <jtomko@redhat.com> Reported-by: Simon Pilkington Reviewed-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Richard W.M. Jones <rjones@redhat.com>
This commit is contained in:
parent
23d78e1c58
commit
faf6edfa74
@ -1462,6 +1462,11 @@ virJSONValueFromString(const char *jsonstring)
|
||||
VIR_DEBUG("string=%s", jsonstring);
|
||||
|
||||
tok = json_tokener_new();
|
||||
if (!tok) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("failed to create JSON tokener"));
|
||||
return NULL;
|
||||
}
|
||||
json_tokener_set_flags(tok, jsonflags);
|
||||
jobj = json_tokener_parse_ex(tok, jsonstring, strlen(jsonstring));
|
||||
jerr = json_tokener_get_error(tok);
|
||||
@ -1475,7 +1480,8 @@ virJSONValueFromString(const char *jsonstring)
|
||||
|
||||
cleanup:
|
||||
json_object_put(jobj);
|
||||
json_tokener_free(tok);
|
||||
if (tok)
|
||||
json_tokener_free(tok);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -272,6 +272,10 @@ findLeases(const char *file,
|
||||
}
|
||||
|
||||
tok = json_tokener_new();
|
||||
if (!tok) {
|
||||
ERROR("failed to create JSON tokener");
|
||||
goto cleanup;
|
||||
}
|
||||
json_tokener_set_flags(tok, jsonflags);
|
||||
|
||||
do {
|
||||
@ -301,7 +305,8 @@ findLeases(const char *file,
|
||||
|
||||
cleanup:
|
||||
json_object_put(jobj);
|
||||
json_tokener_free(tok);
|
||||
if (tok)
|
||||
json_tokener_free(tok);
|
||||
if (ret != 0) {
|
||||
free(*addrs);
|
||||
*addrs = NULL;
|
||||
|
@ -134,6 +134,10 @@ findMACs(const char *file,
|
||||
}
|
||||
|
||||
tok = json_tokener_new();
|
||||
if (!tok) {
|
||||
ERROR("failed to create JSON tokener");
|
||||
goto cleanup;
|
||||
}
|
||||
json_tokener_set_flags(tok, jsonflags);
|
||||
|
||||
do {
|
||||
@ -162,7 +166,8 @@ findMACs(const char *file,
|
||||
|
||||
cleanup:
|
||||
json_object_put(jobj);
|
||||
json_tokener_free(tok);
|
||||
if (tok)
|
||||
json_tokener_free(tok);
|
||||
if (ret != 0) {
|
||||
for (i = 0; i < *nmacs; i++) {
|
||||
char *mac = (*macs)[i];
|
||||
|
Loading…
Reference in New Issue
Block a user