okay, thanks all for the suggestions, I'll make changes to a new commit, so
that you can review the commit5 later.

On Tue, Oct 22, 2024 at 1:14 AM Konstantin Kostiuk <kkost...@redhat.com>
wrote:

>
>
> On Mon, Oct 21, 2024 at 7:45 PM Daniel P. Berrangé <berra...@redhat.com>
> wrote:
>
>> On Mon, Oct 21, 2024 at 09:28:36PM +0800, Dehan Meng wrote:
>> > sscanf return values are checked and add 'Null' check for
>> > mandatory parameters.
>> >
>> > Signed-off-by: Dehan Meng <dem...@redhat.com>
>> > ---
>> >  qga/commands-linux.c | 12 +++++++++++-
>> >  1 file changed, 11 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/qga/commands-linux.c b/qga/commands-linux.c
>> > index 51d5e3d927..f0e9cdd27c 100644
>> > --- a/qga/commands-linux.c
>> > +++ b/qga/commands-linux.c
>> > @@ -2103,7 +2103,9 @@ static char *hexToIPAddress(const void *hexValue,
>> int is_ipv6)
>> >          int i;
>> >
>> >          for (i = 0; i < 16; i++) {
>> > -            sscanf(&hexStr[i * 2], "%02hhx", &in6.s6_addr[i]);
>> > +            if (sscanf(&hex_str[i * 2], "%02hhx", &in6.s6_addr[i]) !=
>> 1) {
>> > +                return NULL;
>> > +            }
>> >          }
>> >          inet_ntop(AF_INET6, &in6, addr, INET6_ADDRSTRLEN);
>> >
>> > @@ -2164,6 +2166,10 @@ GuestNetworkRouteList
>> *qmp_guest_network_get_route(Error **errp)
>> >                  networkroute = route;
>> >                  networkroute->iface = g_strdup(Iface);
>> >                  networkroute->destination =
>> hexToIPAddress(Destination, 1);
>> > +                if (networkroute->destination == NULL) {
>> > +                    g_free(route);
>> > +                    continue;
>> > +                }
>>
>> This is still leaking the 'networkroute->iface' string.
>>
>> The existing code is a bit strange having 'route' and 'networkroute'
>> variables.
>>
>> I'd suggest removing the "route" variable entirely.
>>
>
> This part was done in patch 4/4
>
>
>>
>> Then have a code pattern that relies on g_autoptr to automatically
>> free the struct & all its fields.
>>
>
> Agree with this
>
>
>>
>> eg something that looks approx like this:
>>
>>    g_autoptr(GuestNetorkRoute) networkroute = NULL;
>>
>>    ...
>>
>>    if (is_ipv6) {
>>        ...
>>        networkroute = g_new0(GuestNetorkRoute, 1);
>>        networkroute->iface = g_strdup(Iface);
>>        networkroute->destination = hexToIPAddress(Destination, 1);
>>        if (networkroute->destination == NULL) {
>>           continue;
>>        }
>>        ...
>>    } else {
>>        ...
>>        networkroute = g_new0(GuestNetorkRoute, 1);
>>        networkroute->iface = g_strdup(Iface);
>>        networkroute->destination = hexToIPAddress(Destination, 1);
>>        if (networkroute->destination == NULL) {
>>           continue;
>>        }
>>        ...
>>    }
>>
>>    QAPI_LIST_APPEND(tail, g_steal_pointer(&networkroute));
>>
>>
>> >                  networkroute->metric = Metric;
>> >                  networkroute->source = hexToIPAddress(Source, 1);
>> >                  networkroute->desprefixlen = g_strdup_printf(
>> > @@ -2195,6 +2201,10 @@ GuestNetworkRouteList
>> *qmp_guest_network_get_route(Error **errp)
>> >                  networkroute = route;
>> >                  networkroute->iface = g_strdup(Iface);
>> >                  networkroute->destination =
>> hexToIPAddress(&Destination, 0);
>> > +                if (networkroute->destination == NULL) {
>> > +                    g_free(route);
>> > +                    continue;
>> > +                }
>> >                  networkroute->gateway = hexToIPAddress(&Gateway, 0);
>> >                  networkroute->mask = hexToIPAddress(&Mask, 0);
>> >                  networkroute->metric = Metric;
>> > --
>> > 2.40.1
>> >
>>
>> With regards,
>> Daniel
>> --
>> |: https://berrange.com      -o-
>> https://www.flickr.com/photos/dberrange :|
>> |: https://libvirt.org         -o-
>> https://fstop138.berrange.com :|
>> |: https://entangle-photo.org    -o-
>> https://www.instagram.com/dberrange :|
>>
>>

Reply via email to