[Libguestfs] [PATCH v3 1/3] do_btrfs_qgroup_show: fix a bad return value
Pino Toscano
ptoscano at redhat.com
Tue Jun 16 13:27:33 UTC 2015
On Monday 15 June 2015 11:49:35 Chen Hanxiao wrote:
> We should not use tmp lines buffer as return value,
> for lines buffer will be freed.
>
> Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
> ---
> v3: don't return internal tmp values.
>
> daemon/btrfs.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/daemon/btrfs.c b/daemon/btrfs.c
> index 39392f7..5011ec4 100644
> --- a/daemon/btrfs.c
> +++ b/daemon/btrfs.c
> @@ -1254,7 +1254,7 @@ do_btrfs_qgroup_show (const char *path)
> CLEANUP_FREE char *err = NULL;
> CLEANUP_FREE char *out = NULL;
> int r;
> - char **lines;
> + CLEANUP_FREE_STRING_LIST char **lines = NULL;
>
> path_buf = sysroot_path (path);
> if (path_buf == NULL) {
> @@ -1320,14 +1320,14 @@ do_btrfs_qgroup_show (const char *path)
The full code here is:
if (sscanf (line, "%" SCNu64 "/%" SCNu64 " %" SCNu64 " %" SCNu64,
&dummy1, &dummy2, &this->btrfsqgroup_rfer,
&this->btrfsqgroup_excl) != 4) {
reply_with_error ("cannot parse output of qgroup show command: %s", line);
goto error;
}
p = strchr(line, ' ');
if (!p) {
reply_with_error ("truncated line: %s", line);
goto error;
}
> *p = '\0';
> - this->btrfsqgroup_id = line;
> + this->btrfsqgroup_id = strdup (line);
> + if (this->btrfsqgroup_id == NULL)
> + goto error;
> }
I'd say that sscanf + character class + allocation should be able to
extract the string of the qgroup id, so there's no need to change
'line' nor to manually duplicate part of the string.
Something like:
sscanf (line, "%m[0-9/] %" SCNu64 " %" SCNu64,
&this->btrfsqgroup_id, &this->btrfsqgroup_rfer,
&this->btrfsqgroup_excl)
Thanks,
--
Pino Toscano
More information about the Libguestfs
mailing list