Zebediah Figura : msi: Perform partial copies in MsiViewGetError().
Alexandre Julliard
julliard at winehq.org
Wed Mar 27 17:27:36 CDT 2019
Module: wine
Branch: master
Commit: 6a3dbf11923b96c93f1869c9b9ed34d68bdb2576
URL: https://source.winehq.org/git/wine.git/?a=commit;h=6a3dbf11923b96c93f1869c9b9ed34d68bdb2576
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Tue Mar 26 18:56:16 2019 -0500
msi: Perform partial copies in MsiViewGetError().
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msi/msiquery.c | 26 ++++++--------------------
dlls/msi/tests/db.c | 4 ++--
2 files changed, 8 insertions(+), 22 deletions(-)
diff --git a/dlls/msi/msiquery.c b/dlls/msi/msiquery.c
index 862805f..3c22a21 100644
--- a/dlls/msi/msiquery.c
+++ b/dlls/msi/msiquery.c
@@ -772,7 +772,6 @@ MSIDBERROR WINAPI MsiViewGetErrorW( MSIHANDLE handle, LPWSTR buffer, LPDWORD buf
MSIQUERY *query;
const WCHAR *column;
MSIDBERROR r;
- DWORD len;
TRACE("%u %p %p\n", handle, buffer, buflen);
@@ -786,15 +785,9 @@ MSIDBERROR WINAPI MsiViewGetErrorW( MSIHANDLE handle, LPWSTR buffer, LPDWORD buf
if ((r = query->view->error)) column = query->view->error_column;
else column = szEmpty;
- len = strlenW( column );
- if (buffer)
- {
- if (*buflen > len)
- strcpyW( buffer, column );
- else
- r = MSIDBERROR_MOREDATA;
- }
- *buflen = len;
+ if (msi_strncpyW(column, -1, buffer, buflen) == ERROR_MORE_DATA)
+ r = MSIDBERROR_MOREDATA;
+
msiobj_release( &query->hdr );
return r;
}
@@ -804,7 +797,6 @@ MSIDBERROR WINAPI MsiViewGetErrorA( MSIHANDLE handle, LPSTR buffer, LPDWORD bufl
MSIQUERY *query;
const WCHAR *column;
MSIDBERROR r;
- DWORD len;
TRACE("%u %p %p\n", handle, buffer, buflen);
@@ -818,15 +810,9 @@ MSIDBERROR WINAPI MsiViewGetErrorA( MSIHANDLE handle, LPSTR buffer, LPDWORD bufl
if ((r = query->view->error)) column = query->view->error_column;
else column = szEmpty;
- len = WideCharToMultiByte( CP_ACP, 0, column, -1, NULL, 0, NULL, NULL );
- if (buffer)
- {
- if (*buflen >= len)
- WideCharToMultiByte( CP_ACP, 0, column, -1, buffer, *buflen, NULL, NULL );
- else
- r = MSIDBERROR_MOREDATA;
- }
- *buflen = len - 1;
+ if (msi_strncpyWtoA(column, -1, buffer, buflen, FALSE) == ERROR_MORE_DATA)
+ r = MSIDBERROR_MOREDATA;
+
msiobj_release( &query->hdr );
return r;
}
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 16b20e5..181301e 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -9163,14 +9163,14 @@ static void test_view_get_error(void)
strcpy(buffer, "x");
err = MsiViewGetErrorA(view, buffer, &sz);
ok(err == MSIDBERROR_MOREDATA, "got %d\n", err);
- todo_wine ok(!buffer[0], "got \"%s\"\n", buffer);
+ ok(!buffer[0], "got \"%s\"\n", buffer);
ok(sz == 1, "got size %u\n", sz);
sz = 1;
strcpy(buffer, "x");
err = MsiViewGetErrorA(view, buffer, &sz);
todo_wine ok(err == MSIDBERROR_NOERROR, "got %d\n", err);
- todo_wine ok(!buffer[0], "got \"%s\"\n", buffer);
+ ok(!buffer[0], "got \"%s\"\n", buffer);
todo_wine ok(sz == 0, "got size %u\n", sz);
r = MsiViewModify(view, MSIMODIFY_VALIDATE_NEW, rec);
More information about the wine-cvs
mailing list