From: Alex Henrie alexhenrie24@gmail.com
--- dlls/odbccp32/odbccp32.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/dlls/odbccp32/odbccp32.c b/dlls/odbccp32/odbccp32.c index 90875121438..c912bc0f3cc 100644 --- a/dlls/odbccp32/odbccp32.c +++ b/dlls/odbccp32/odbccp32.c @@ -638,6 +638,7 @@ BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout)
valuelen = 256; value = malloc(valuelen * sizeof(WCHAR)); + if (!value) goto oom;
size--;
@@ -647,7 +648,9 @@ BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout) res = RegEnumValueW(drivers, index, value, &len, NULL, NULL, NULL, NULL); while (res == ERROR_MORE_DATA) { - value = realloc(value, ++len * sizeof(WCHAR)); + free(value); + value = malloc(++len * sizeof(WCHAR)); + if (!value) goto oom; res = RegEnumValueW(drivers, index, value, &len, NULL, NULL, NULL, NULL); } if (res == ERROR_SUCCESS) @@ -673,6 +676,10 @@ BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout) if (sizeout) *sizeout = written; return ret; + +oom: + push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem); + return FALSE; }
BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)