[libvirt] [PATCH 6/7 v6] virsh: Don't motify the const string

Osier Yang jyang at redhat.com
Mon Sep 17 03:38:02 UTC 2012


On 2012年09月15日 06:05, Peter Krempa wrote:
> On 09/14/12 18:21, Osier Yang wrote:
>> This improve helper vshStringToArray to accept const string as
>> argument instead. To not convert the const string when using
>> vshStringToArray, and thus avoid motifying it.
>> ---
>> tools/virsh-domain.c | 7 +++----
>> tools/virsh-pool.c | 3 ++-
>> tools/virsh.c | 10 ++++++----
>> tools/virsh.h | 2 +-
>> 4 files changed, 12 insertions(+), 10 deletions(-)
>>
>> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
>> index c6695b3..3ad02eb 100644
>> --- a/tools/virsh-domain.c
>> +++ b/tools/virsh-domain.c
>> @@ -2336,8 +2336,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
>> /* list of volumes to remove along with this domain */
>> vshUndefineVolume *vlist = NULL;
>> int nvols = 0;
>> - const char *volumes_arg = NULL;
>> - char *volumes = NULL;
>> + const char *volumes = NULL;
>> char **volume_tokens = NULL;
>> char *volume_tok = NULL;
>> int nvolume_tokens = 0;
>> @@ -2352,8 +2351,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
>> int nvolumes = 0;
>> bool vol_not_found = false;
>>
>> - ignore_value(vshCommandOptString(cmd, "storage", &volumes_arg));
>> - volumes = vshStrdup(ctl, volumes_arg);
>> + ignore_value(vshCommandOptString(cmd, "storage", &volumes));
>>
>> if (managed_save) {
>> flags |= VIR_DOMAIN_UNDEFINE_MANAGED_SAVE;
>> @@ -2606,6 +2604,7 @@ cleanup:
>> VIR_FREE(vlist);
>>
>> VIR_FREE(volumes);
>> + VIR_FREE(*volume_tokens);
>
> Doing this guarantees a segfault. In many cases the token array may be
> NULL and you dereference it. This would cause a huge regression:

Ah, I rushed. Okay, now I pushed the series with the nits fixed.
Thanks for the reviewing!

Regards,
Osier





More information about the libvir-list mailing list