FindFirstVolumeW, FindNextVolumeW and GetVolumePathNamesForVolumeNameW
expect a buffer length in characters, not bytes.

Use ARRAYSIZE() to pass the correct character count.

Fixes: b39297aedfab ("qemu-ga: Add Windows VSS provider and requester as DLL")
Signed-off-by: Marc-André Lureau <[email protected]>
---
 qga/vss-win32/requester.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp
index b9269acb5b8e..1fd73312bab2 100644
--- a/qga/vss-win32/requester.cpp
+++ b/qga/vss-win32/requester.cpp
@@ -432,7 +432,7 @@ void requester_freeze(int *num_vols, void *mountpoints, 
ErrorSet *errset)
     }
 
     if (!mountpoints) {
-        volume = FindFirstVolumeW(short_volume_name, 
sizeof(short_volume_name));
+        volume = FindFirstVolumeW(short_volume_name, 
ARRAYSIZE(short_volume_name));
         if (volume == INVALID_HANDLE_VALUE) {
             err_set(errset, hr, "failed to find first volume");
             goto out;
@@ -447,7 +447,7 @@ void requester_freeze(int *num_vols, void *mountpoints, 
ErrorSet *errset)
                     WCHAR volume_path_name[MAX_PATH];
                     if (GetVolumePathNamesForVolumeNameW(
                             short_volume_name, volume_path_name,
-                            sizeof(volume_path_name), NULL) &&
+                            ARRAYSIZE(volume_path_name), NULL) &&
                             *volume_path_name) {
                         display_name = volume_path_name;
                     }
@@ -459,7 +459,7 @@ void requester_freeze(int *num_vols, void *mountpoints, 
ErrorSet *errset)
                 num_fixed_drives++;
             }
             if (!FindNextVolumeW(volume, short_volume_name,
-                                 sizeof(short_volume_name))) {
+                                 ARRAYSIZE(short_volume_name))) {
                 FindVolumeClose(volume);
                 break;
             }

-- 
2.55.0.543.g5ebe2ebe4ea8


Reply via email to