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
