block/gluster: Use g_autofree for string in qemu_gluster_parse_json()
In the loop in qemu_gluster_parse_json() we do: char *str = NULL; for(...) { str = g_strdup_printf(...); ... if (various errors) { goto out; } ... g_free(str); str = NULL; } return 0; out: various cleanups; g_free(str); ... return -errno; Coverity correctly complains that the assignment "str = NULL" at the end of the loop is unnecessary, because we will either go back to the top of the loop and overwrite it, or else we will exit the loop and then exit the function without ever reading str again. The assignment is there as defensive coding to ensure that str is only non-NULL if it's a live allocation, so this is intentional. We can make Coverity happier and simplify the code here by using g_autofree, since we never need 'str' outside the loop. Resolves: Coverity CID 1527385 Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20241008164708.2966400-2-peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
6f625ce2f2
commit
75200708ce
@ -514,7 +514,6 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
|
|||||||
SocketAddressList **tail;
|
SocketAddressList **tail;
|
||||||
QDict *backing_options = NULL;
|
QDict *backing_options = NULL;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
char *str = NULL;
|
|
||||||
const char *ptr;
|
const char *ptr;
|
||||||
int i, type, num_servers;
|
int i, type, num_servers;
|
||||||
|
|
||||||
@ -547,7 +546,8 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
|
|||||||
tail = &gconf->server;
|
tail = &gconf->server;
|
||||||
|
|
||||||
for (i = 0; i < num_servers; i++) {
|
for (i = 0; i < num_servers; i++) {
|
||||||
str = g_strdup_printf(GLUSTER_OPT_SERVER_PATTERN"%d.", i);
|
g_autofree char *str = g_strdup_printf(GLUSTER_OPT_SERVER_PATTERN"%d.",
|
||||||
|
i);
|
||||||
qdict_extract_subqdict(options, &backing_options, str);
|
qdict_extract_subqdict(options, &backing_options, str);
|
||||||
|
|
||||||
/* create opts info from runtime_type_opts list */
|
/* create opts info from runtime_type_opts list */
|
||||||
@ -658,8 +658,6 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
|
|||||||
|
|
||||||
qobject_unref(backing_options);
|
qobject_unref(backing_options);
|
||||||
backing_options = NULL;
|
backing_options = NULL;
|
||||||
g_free(str);
|
|
||||||
str = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -668,7 +666,6 @@ out:
|
|||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
qapi_free_SocketAddress(gsconf);
|
qapi_free_SocketAddress(gsconf);
|
||||||
qemu_opts_del(opts);
|
qemu_opts_del(opts);
|
||||||
g_free(str);
|
|
||||||
qobject_unref(backing_options);
|
qobject_unref(backing_options);
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -errno;
|
return -errno;
|
||||||
|
Loading…
Reference in New Issue
Block a user