On Fri, 23 Jan 2026 at 17:51, Fabiano Rosas <[email protected]> wrote:
> >> diff --git a/migration/options.c b/migration/options.c
> >> index 9a5a39c886..9dc44a3736 100644
> >> --- a/migration/options.c
> >> +++ b/migration/options.c
> >> @@ -225,6 +225,7 @@ static void get_StrOrNull(Object *obj, Visitor *v, 
> >> const char *name,
> >>          str_or_null = g_new0(StrOrNull, 1);
> >>          str_or_null->type = QTYPE_QSTRING;
> >>          str_or_null->u.s = g_strdup("");                 <== [1]
> >> +        *ptr = str_or_null;
> >>      } else {
> >>          /* the setter doesn't allow QNULL */
> >>          assert(str_or_null->type != QTYPE_QNULL);
> >> @@ -245,6 +246,7 @@ static void set_StrOrNull(Object *obj, Visitor *v, 
> >> const char *name,
> >>       */
> >>      str_or_null->type = QTYPE_QSTRING;
> >
> > * Do we need to add:  str_or_null->u.s = g_strdup("");  here?
>
> It would leak, the visitor will allocate new memory for it below.

* Then do we need to remove it from get_StrOrNull()?  <== [1] above.

> I'd rather leave to the caller. The errp will be set, I think it's
> enough. Looking at the other instances of visit_type_str in qdev, they
> all simply return without any handling. I think in practice it's
> unlikely that the string visitors will ever set errp because they are
> just a g_strdup() usually.

* Hmmn, okay. Coverity reported a leak for it in set_StrOrNull(), not
other places?

Thank you.
---
  - Prasad


Reply via email to