Module: wine Branch: master Commit: 3915b8d22921daeb30015b2204ff90f25ca19cb6 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3915b8d22921daeb30015b220...
Author: Gijs Vermeulen gijsvrm@codeweavers.com Date: Sat Nov 16 17:08:44 2019 +0100
odbccp32: Handle NULL sizeout in SQLGetInstalledDrivers.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48111 Signed-off-by: Gijs Vermeulen gijsvrm@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/odbccp32/odbccp32.c | 3 ++- dlls/odbccp32/tests/misc.c | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/dlls/odbccp32/odbccp32.c b/dlls/odbccp32/odbccp32.c index 1198b487f3..a09d6571f3 100644 --- a/dlls/odbccp32/odbccp32.c +++ b/dlls/odbccp32/odbccp32.c @@ -583,7 +583,8 @@ BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout) return FALSE; }
- *sizeout = WideCharToMultiByte(CP_ACP, 0, wbuf, written, NULL, 0, NULL, NULL); + if (sizeout) + *sizeout = WideCharToMultiByte(CP_ACP, 0, wbuf, written, NULL, 0, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, wbuf, written, buf, size, NULL, NULL);
heap_free(wbuf); diff --git a/dlls/odbccp32/tests/misc.c b/dlls/odbccp32/tests/misc.c index dc2ca7ed3f..e2f48ee732 100644 --- a/dlls/odbccp32/tests/misc.c +++ b/dlls/odbccp32/tests/misc.c @@ -643,6 +643,11 @@ static void test_SQLGetInstalledDrivers(void) ok(!ret, "got %d\n", ret); check_error(ODBC_ERROR_INVALID_BUFF_LEN);
+ ret = SQLGetInstalledDrivers(buffer, 10, NULL); + ok(ret, "got %d\n", ret); + ok(strlen(buffer) == 8, "got len %u\n", lstrlenA(buffer)); + ok(!buffer[9], "buffer not doubly null-terminated\n"); + ret = SQLGetInstalledDrivers(buffer, 10, &written); ok(ret, "got %d\n", ret); ok(strlen(buffer) == 8, "got len %u\n", lstrlenA(buffer));