[Bug 48111] New: myodbc-installer v5.x (part of Toad for MySQL Freeware 7.x) crashes when querying for installed drivers ('SQLGetInstalledDrivers' doesn't handle NULL 'sizeout')
WineHQ Bugzilla
wine-bugs at winehq.org
Sat Nov 16 08:24:17 CST 2019
https://bugs.winehq.org/show_bug.cgi?id=48111
Bug ID: 48111
Summary: myodbc-installer v5.x (part of Toad for MySQL Freeware
7.x) crashes when querying for installed drivers
('SQLGetInstalledDrivers' doesn't handle NULL
'sizeout')
Product: Wine
Version: 4.20
Hardware: x86-64
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: odbc
Assignee: wine-bugs at winehq.org
Reporter: focht at gmx.net
Distribution: ---
Hello folks,
as it says. The tool is part of Toad for MySQL Freeware 7.x installation.
Prerequisite: 'winetricks -q dotnet45'
--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files (x86)/Quest Software/Toad for MySQL
Freeware 7.3/Plugins/MySQL/ODBC/bin
$ wine ./myodbc-installer.exe
[ERROR] Not enough arguments given
+---
| myodbc-installer v5.01.0012
+---
|
| Description
|
| This program can be used to create, edit or remove a DSN. It
| can also be used to register or deregister a driver. In other
| words - it can be used to manage ODBC system information.
|
| This operates consistently across platforms. This has been created
| specifically for MySQL Connector/ODBC.
|
| Syntax
|
| myodbc-installer <Object> <Action> [Options]
|
| Object
|
| -d driver
| -s datasource
|
| Action
|
| -l list
| -a add (add/update for data source)
| -r remove
|
| Options
|
| -n <name>
| -t <attribute string>
| -c0 both
| -c1 user data source
| -c2 system data source (default)
|
| Examples
|
| List drivers
| -d -l
|
| Register a driver (UNIX example)
| -d -a -n "MySQL ODBC 5.1 Driver" \
| -t "DRIVER=/usr/lib/myodbc5.so;SETUP=/usr/lib/myodbc3S.so"
|
| Register a driver (Windows example)
| -d -a -n "MySQL ODBC 5.1 Driver" \
| -t "DRIVER=myodbc5.dll;SETUP=myodbc5S.dll"
|
| Add a new data source name
| -s -a -c2 -n "test" \
| -t "DRIVER=MySQL ODBC 5.1
Driver;SERVER=localhost;DATABASE=test;UID=myid;PWD=mypwd"
|
| List data source name attributes for 'test'
| -s -l -c2 -n "test"
+---
...
--- snip ---
--- snip ---
$ WINEDEBUG=+seh,+relay wine ./myodbc-installer.exe -d -l >>log.txt 2>&1
...
002d:Ret KERNEL32.LoadLibraryA() retval=6f280000 ret=0040623c
002d:Call KERNEL32.LoadLibraryA(0119f76c "C:\\windows\\system32\\odbccp32.dll")
ret=00406247
...
002d:Call odbccp32.SQLGetConfigMode(0119fecc) ret=004024aa
...
002d:Ret odbccp32.SQLGetConfigMode() retval=00000001 ret=004024aa
...
002d:Call odbccp32.SQLSetConfigMode(00000002) ret=004024c3
002d:Ret odbccp32.SQLSetConfigMode() retval=00000001 ret=004024c3
...
002d:Call odbccp32.SQLGetInstalledDrivers(01193b88,0000c350,00000000)
ret=004013ac
002d:Call ntdll.RtlAllocateHeap(00110000,00000000,000186a0) ret=6f284207
002d:Ret ntdll.RtlAllocateHeap() retval=0015be38 ret=6f284207
002d:Call advapi32.RegOpenKeyExW(80000002,6f28cae0
L"Software\\ODBC\\ODBCINST.INI\\ODBC Drivers",00000000,00000001,01193ab8)
ret=6f283e42
002d:Call ntdll.RtlInitUnicodeString(01193a10,6f28cae0
L"Software\\ODBC\\ODBCINST.INI\\ODBC Drivers") ret=7127823b
002d:Ret ntdll.RtlInitUnicodeString() retval=00000050 ret=7127823b
002d:Call ntdll.NtOpenKeyEx(01193ab8,00000001,01193a18,00000000) ret=7127826f
002d:Ret ntdll.NtOpenKeyEx() retval=00000000 ret=7127826f
002d:Call ntdll.RtlNtStatusToDosError(00000000) ret=7127827b
002d:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=7127827b
002d:Ret advapi32.RegOpenKeyExW() retval=00000000 ret=6f283e42
002d:Call ntdll.RtlAllocateHeap(00110000,00000000,00000200) ret=6f283f36
002d:Ret ntdll.RtlAllocateHeap() retval=00156b28 ret=6f283f36
002d:Call
advapi32.RegEnumValueW(00000050,00000000,00156b28,01193abc,00000000,00000000,00000000,00000000)
ret=6f283f95
002d:Call
ntdll.NtEnumerateValueKey(00000050,00000000,00000001,01193910,00000100,0119390c)
ret=7127718b
002d:Ret ntdll.NtEnumerateValueKey() retval=00000000 ret=7127718b
002d:Call ntdll.memcpy(00156b28,01193924,0000000e) ret=71277328
002d:Ret ntdll.memcpy() retval=00156b28 ret=71277328
002d:Call ntdll.RtlNtStatusToDosError(00000000) ret=712772b8
002d:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=712772b8
002d:Ret advapi32.RegEnumValueW() retval=00000000 ret=6f283f95
002d:Call
advapi32.RegEnumValueW(00000050,00000001,00156b28,01193abc,00000000,00000000,00000000,00000000)
ret=6f283f95
002d:Call
ntdll.NtEnumerateValueKey(00000050,00000001,00000001,01193910,00000100,0119390c)
ret=7127718b
002d:Ret ntdll.NtEnumerateValueKey() retval=00000000 ret=7127718b
002d:Call ntdll.memcpy(00156b28,01193924,0000000e) ret=71277328
002d:Ret ntdll.memcpy() retval=00156b28 ret=71277328
002d:Call ntdll.RtlNtStatusToDosError(00000000) ret=712772b8
002d:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=712772b8
002d:Ret advapi32.RegEnumValueW() retval=00000000 ret=6f283f95
002d:Call
advapi32.RegEnumValueW(00000050,00000002,00156b28,01193abc,00000000,00000000,00000000,00000000)
ret=6f283f95
002d:Call
ntdll.NtEnumerateValueKey(00000050,00000002,00000001,01193910,00000100,0119390c)
ret=7127718b
002d:Ret ntdll.NtEnumerateValueKey() retval=00000000 ret=7127718b
002d:Call ntdll.memcpy(00156b28,01193924,0000000a) ret=71277328
002d:Ret ntdll.memcpy() retval=00156b28 ret=71277328
002d:Call ntdll.RtlNtStatusToDosError(00000000) ret=712772b8
002d:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=712772b8
002d:Ret advapi32.RegEnumValueW() retval=00000000 ret=6f283f95
002d:Call
advapi32.RegEnumValueW(00000050,00000003,00156b28,01193abc,00000000,00000000,00000000,00000000)
ret=6f283f95
002d:Call
ntdll.NtEnumerateValueKey(00000050,00000003,00000001,01193910,00000100,0119390c)
ret=7127718b
002d:Ret ntdll.NtEnumerateValueKey() retval=00000000 ret=7127718b
002d:Call ntdll.memcpy(00156b28,01193924,0000002a) ret=71277328
002d:Ret ntdll.memcpy() retval=00156b28 ret=71277328
002d:Call ntdll.RtlNtStatusToDosError(00000000) ret=712772b8
002d:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=712772b8
002d:Ret advapi32.RegEnumValueW() retval=00000000 ret=6f283f95
002d:Call
advapi32.RegEnumValueW(00000050,00000004,00156b28,01193abc,00000000,00000000,00000000,00000000)
ret=6f283f95
002d:Call
ntdll.NtEnumerateValueKey(00000050,00000004,00000001,01193910,00000100,0119390c)
ret=7127718b
002d:Ret ntdll.NtEnumerateValueKey() retval=00000000 ret=7127718b
002d:Call ntdll.memcpy(00156b28,01193924,00000014) ret=71277328
002d:Ret ntdll.memcpy() retval=00156b28 ret=71277328
002d:Call ntdll.RtlNtStatusToDosError(00000000) ret=712772b8
002d:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=712772b8
002d:Ret advapi32.RegEnumValueW() retval=00000000 ret=6f283f95
002d:Call
advapi32.RegEnumValueW(00000050,00000005,00156b28,01193abc,00000000,00000000,00000000,00000000)
ret=6f283f95
002d:Call
ntdll.NtEnumerateValueKey(00000050,00000005,00000001,01193910,00000100,0119390c)
ret=7127718b
002d:Ret ntdll.NtEnumerateValueKey() retval=8000001a ret=7127718b
002d:Call ntdll.RtlNtStatusToDosError(8000001a) ret=712772b8
002d:Ret ntdll.RtlNtStatusToDosError() retval=00000103 ret=712772b8
002d:Ret advapi32.RegEnumValueW() retval=00000103 ret=6f283f95
002d:Call KERNEL32.HeapFree(00110000,00000000,00156b28) ret=6f2840fd
002d:Ret KERNEL32.HeapFree() retval=00000001 ret=6f2840fd
002d:Call advapi32.RegCloseKey(00000050) ret=6f28410b
002d:Call ntdll.NtClose(00000050) ret=71276114
002d:Ret ntdll.NtClose() retval=00000000 ret=71276114
002d:Call ntdll.RtlNtStatusToDosError(00000000) ret=7bc9a6b4
002d:Ret ntdll.RtlNtStatusToDosError() retval=00000000 ret=7bc9a6b4
002d:Ret advapi32.RegCloseKey() retval=00000000 ret=6f28410b
002d:Call KERNEL32.WideCharToMultiByte(00000000,00000000,0015be38
L"FreeTDS",00000038,00000000,00000000,00000000,00000000) ret=6f284275
002d:Ret KERNEL32.WideCharToMultiByte() retval=00000038 ret=6f284275
002d:trace:seh:raise_exception code=c0000005 flags=0 addr=0x6f28427b
ip=6f28427b tid=002d
002d:trace:seh:raise_exception info[0]=00000001
002d:trace:seh:raise_exception info[1]=00000000
002d:trace:seh:raise_exception eax=00000038 ebx=0000c350 ecx=00000000
edx=00000000 esi=0015be38 edi=7ffd8000
002d:trace:seh:raise_exception ebp=01193b38 esp=01193ae0 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00010202
002d:trace:seh:call_stack_handlers calling handler at 0x42b630 code=c0000005
flags=0
002d:Call KERNEL32.GetLastError() ret=0042cb2b
--- snip ---
The unicode variant respects the NULL out parameter - the ANSI variant not.
Wine source:
https://source.winehq.org/git/wine.git/blob/8df456ccd4ce1c2c42e5a24c71a8c3eb7d05ff03:/dlls/odbccp32/odbccp32.c#l558
--- snip ---
558 BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
559 {
560 WORD written;
561 WCHAR *wbuf;
562 BOOL ret;
563
564 TRACE("%p %d %p\n", buf, size, sizeout);
565
566 if (!buf || !size)
567 {
568 push_error(ODBC_ERROR_INVALID_BUFF_LEN,
odbc_error_invalid_buff_len);
569 return FALSE;
570 }
571
572 wbuf = heap_alloc(size * sizeof(WCHAR));
573 if (!wbuf)
574 {
575 push_error(ODBC_ERROR_OUT_OF_MEM, odbc_error_out_of_mem);
576 return FALSE;
577 }
578
579 ret = SQLGetInstalledDriversW(wbuf, size, &written);
580 if (!ret)
581 {
582 heap_free(wbuf);
583 return FALSE;
584 }
585
586 *sizeout = WideCharToMultiByte(CP_ACP, 0, wbuf, written, NULL, 0,
NULL, NULL);
587 WideCharToMultiByte(CP_ACP, 0, wbuf, written, buf, size, NULL, NULL);
588
589 heap_free(wbuf);
590 return TRUE;
591 }
--- snip ---
Microsoft docs:
https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetinstalleddrivers-function?view=sql-server-ver15
--- quote ---
pcbBufOut
[Output] Total number of bytes (excluding the null-termination byte) returned
in lpszBuf. If the number of bytes available to return is greater than or equal
to cbBufMax, the list of driver descriptions in lpszBuf is truncated to
cbBufMax minus the null-termination character. The pcbBufOut argument can be a
null pointer.
--- quote ---
Download:
https://web.archive.org/web/20191116093038/https://files.downloadnow.com/s/software/14/02/03/71/ToadforMySQL_Freeware_7.3.1.3290.zip?token=1573932545_5663baad542da14192ac6eb4e1d29924&fileName=ToadforMySQL_Freeware_7.3.1.3290.zip
$ sha1sum ToadforMySQL_Freeware_7.3.1.3290.*
8afd76a00c1ebb538230bb11036471778af5c2a6 ToadforMySQL_Freeware_7.3.1.3290.exe
29c1bd74b1e9133a9f9cacdd2b25244bdab38d4a ToadforMySQL_Freeware_7.3.1.3290.zip
$ du -sh ToadforMySQL_Freeware_7.3.1.3290.*
80M ToadforMySQL_Freeware_7.3.1.3290.exe
80M ToadforMySQL_Freeware_7.3.1.3290.zip
$ wine --version
wine-4.20
Regards
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list