
On 12/28/2013 11:11 AM, Eric Blake wrote:
In datatype.c, virGetDomainSnapshot could result in the message:
error: invalid domain pointer in bad domain
Furthermore, while there are a few functions in libvirt.c that only care about a virDomainPtr without regards to the connection (such as virDomainGetName), most functions also require a valid connection. Yet several functions were blindly derefencing the conn member without checking it for validity first (such as virDomainOpenConsole). Rather than try and correct all usage of VIR_IS_DOMAIN vs. VIR_IS_CONNECTED_DOMAIN, it is easier to just blindly require that a valid domain object always has a valid connection object (which should be true anyways, since every domain object holds a reference to its connection, so the connection will not be closed until all domain objects have also been closed to release their reference).
After this patch, all places that validate a domain consistently report:
error: invalid domain pointer in someFunc
* src/datatypes.h (virCheckDomainReturn, virCheckDomainGoto): New macros. * src/datatypes.c (virGetDomainSnapshot): Use new macro. (virLibConnError): Delete unused macro.
Signed-off-by: Eric Blake <eblake@redhat.com> --- po/POTFILES.in | 1 - src/datatypes.c | 18 +- src/datatypes.h | 23 ++ src/libvirt-lxc.c | 11 +- src/libvirt-qemu.c | 18 +- src/libvirt.c | 1055 +++++++++++++--------------------------------------- 6 files changed, 284 insertions(+), 842 deletions(-)
ACK I was going to point out a couple patches ago about the usage of domain->conn->flags in a call followed by a conn = domain->conn and then usage of conn-> afterwards, but figured it'd be cleared up soon enough... It was! :-) John