Reviewed-by: Kostiantyn Kostiuk <[email protected]>

On Mon, Sep 7, 2026 at 1:50 PM Marc-André Lureau <
[email protected]> wrote:

> CQGAVssProvider implements three COM interfaces, each with its own
> IUnknown base subobject. Returning the complete object address for
> IID_IUnknown relies on IVssSoftwareSnapshotProvider remaining the first
> base class.
>
> Return the IVssSoftwareSnapshotProvider subobject instead. This selects
> the canonical IUnknown identity without relying on the complete-object
> layout.
>
> Signed-off-by: Marc-André Lureau <[email protected]>
> ---
>  qga/vss-win32/provider.cpp | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/qga/vss-win32/provider.cpp b/qga/vss-win32/provider.cpp
> index 377571b94881..44c3c74bd2f2 100644
> --- a/qga/vss-win32/provider.cpp
> +++ b/qga/vss-win32/provider.cpp
> @@ -212,7 +212,8 @@ CQGAVssProvider::~CQGAVssProvider()
>  STDMETHODIMP CQGAVssProvider::QueryInterface(REFIID riid, void **ppObj)
>  {
>      if (riid == IID_IUnknown) {
> -        *ppObj = static_cast<void*>(this);
> +        *ppObj = static_cast<void*>(
> +            static_cast<IVssSoftwareSnapshotProvider*>(this));
>          AddRef();
>          return S_OK;
>      }
>
> --
> 2.55.0.543.g5ebe2ebe4ea8
>
>

Reply via email to