On 30.09.24 11:14, marcandre.lur...@redhat.com wrote:
From: Marc-André Lureau <marcandre.lur...@redhat.com>

object_resolve_path_type() didn't always set *ambiguousp.

Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com>
---
  qom/object.c | 5 ++++-
  1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/qom/object.c b/qom/object.c
index 28c5b66eab..bdc8a2c666 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -2201,6 +2201,9 @@ Object *object_resolve_path_type(const char *path, const 
char *typename,
          }
      } else {
          obj = object_resolve_abs_path(object_get_root(), parts + 1, typename);
+        if (ambiguousp) {
+            *ambiguousp = false;
+        }

Doesn't this hunk in isolation fix the issue? With this 
object_resolve_path_type() should set the pointer on all paths if it is 
non-null..

Hmm, called object_resolve_partial_path() also doesn't set ambiguous on every 
path, so this hunk is at lease incomplete.

I'm unsure about what semantics expected around ambigous pointers, but it seems to me 
that it is set only on failure paths, as a reason, why we failed. If this is true, I 
think, we need only the second hunk, which initializes local "ambig".

      }
g_strfreev(parts);
@@ -2226,7 +2229,7 @@ Object *object_resolve_path_at(Object *parent, const char 
*path)
Object *object_resolve_type_unambiguous(const char *typename, Error **errp)
  {
-    bool ambig;
+    bool ambig = false;
      Object *o = object_resolve_path_type("", typename, &ambig);
if (ambig) {

--
Best regards,
Vladimir


Reply via email to