diff --git a/grub-core/lib/json/json.c b/grub-core/lib/json/json.c index 913b8f404..1c20c75ea 100644 --- a/grub-core/lib/json/json.c +++ b/grub-core/lib/json/json.c @@ -71,12 +71,9 @@ grub_json_parse (grub_json_t **out, char *string, grub_size_t string_len) *out = json; err: - if (ret && json) - { - grub_free (json->string); - grub_free (json->tokens); - grub_free (json); - } + if (ret) + grub_json_free (json); + return ret; } diff --git a/grub-core/lib/json/json.h b/grub-core/lib/json/json.h index d9f99454d..01614f6df 100644 --- a/grub-core/lib/json/json.h +++ b/grub-core/lib/json/json.h @@ -50,7 +50,10 @@ typedef struct grub_json grub_json_t; * Parse a JSON-encoded string. Note that the string passed to * this function will get modified on subsequent calls to * grub_json_get*(). Returns the root object of the parsed JSON - * object, which needs to be free'd via grub_json_free(). + * object, which needs to be free'd via grub_json_free(). Callers + * must ensure that the string outlives the returned root object, + * and that child objects must not be used after the root object + * has been free'd. */ extern grub_err_t EXPORT_FUNC(grub_json_parse) (grub_json_t **out, char *string,