• M
    qom: -object error messages lost location, restore it · 51b9b478
    Markus Armbruster 提交于
    qemu_opts_foreach() runs its callback with the error location set to
    the option's location.  Any errors the callback reports use the
    option's location automatically.
    
    Commit 90998d58 moved the actual error reporting from "inside"
    qemu_opts_foreach() to after it.  Here's a typical hunk:
    
    	 if (qemu_opts_foreach(qemu_find_opts("object"),
        -                          object_create,
        -                          object_create_initial, NULL)) {
        +                          user_creatable_add_opts_foreach,
        +                          object_create_initial, &err)) {
        +        error_report_err(err);
    	     exit(1);
    	 }
    
    Before, object_create() reports from within qemu_opts_foreach(), using
    the option's location.  Afterwards, we do it after
    qemu_opts_foreach(), using whatever location happens to be current
    there.  Commonly a "none" location.
    
    This is because Error objects don't have location information.
    Problematic.
    
    Reproducer:
    
        $ qemu-system-x86_64 -nodefaults -display none -object secret,id=foo,foo=bar
        qemu-system-x86_64: Property '.foo' not found
    
    Note no location.  This commit restores it:
    
        qemu-system-x86_64: -object secret,id=foo,foo=bar: Property '.foo' not found
    
    Note that the qemu_opts_foreach() bug just fixed could mask the bug
    here: if the location it leaves dangling hasn't been clobbered, yet,
    it's the correct one.
    Reported-by: NEric Blake <eblake@redhat.com>
    Cc: Daniel P. Berrange <berrange@redhat.com>
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Message-Id: <1461767349-15329-4-git-send-email-armbru@redhat.com>
    Reviewed-by: NDaniel P. Berrange <berrange@redhat.com>
    Reviewed-by: NEric Blake <eblake@redhat.com>
    [Paragraph on Error added to commit message]
    51b9b478
qemu-io.c 14.7 KB