Bug #30291 ODBC driver hangs reading value from TEXT field, if length greather than 4096
Submitted: 8 Aug 2007 5:58 Modified: 14 Aug 2007 18:32
Reporter: Martina Jindrů Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / ODBC Severity:S1 (Critical)
Version:3.51.17 OS:Windows
Assigned to: CPU Architecture:Any

[8 Aug 2007 5:58] Martina Jindrů
Description:
ODBC driver hangup at reading value from TEXT field, if length greather then 4096B 

Configuration: 
============== 
ODBC driver 5.00.12( ODBC driver 3.51.17 too)
MySQL 5.0.45 
Default charset CP1250 (server, database, table) 
VFP 9.0 SP 1 

Result - trace.log: 
=================== 
Full log:
http://disk.jabbim.cz/gorila@dione.zcu.cz/ODBC%203.51-5.00,%20TEXT,%20length%20more%204096...

config 2dc-180 EXIT SQLDescribeCol with return code 0 (SQL_SUCCESS) 
HSTMT 020D1BB0 
UWORD 1 
UCHAR * 0x0012F648 [ 5] "XX001" 
SWORD 255 
SWORD * 0x0012F3BE (5) 
SWORD * 0x01C7BFEC (-1) 
SQLULEN * 0x01C7BFF4 (196605) 
SWORD * 0x01C7BFF8 (0) 
SWORD * 0x0012F3B6 (0) 

config 2dc-180 ENTER SQLFetch 
HSTMT 020D1BB0 

config 2dc-180 EXIT SQLFetch with return code 0 (SQL_SUCCESS) 
HSTMT 020D1BB0 

config 2dc-180 ENTER SQLGetData 
HSTMT 020D1BB0 
UWORD 1 
SWORD 1 <SQL_C_CHAR> 
PTR 0x01150F60 
SQLLEN 4097 
SQLLEN * 0x0012F5E4 

config 2dc-180 EXIT SQLGetData with return code 1 (SQL_SUCCESS_WITH_INFO) 
HSTMT 020D1BB0 
UWORD 1 
SWORD 1 <SQL_C_CHAR> 
PTR 0x01150F60 [ 4097] "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..." SQLLEN 4097 
SQLLEN * 0x0012F5E4 (4097) 

DIAG [01004] [MySQL][MyODBC 5.00.11] Data truncated (0) 

config 2dc-180 ENTER SQLGetData 
HSTMT 020D1BB0 
UWORD 1 
SWORD 1 <SQL_C_CHAR> 
PTR 0x01150F60 
SQLLEN 4097 
SQLLEN * 0x0012F5E4 

config 2dc-180 EXIT SQLGetData with return code 100 (SQL_NO_DATA_FOUND) 
HSTMT 020D1BB0 
UWORD 1 
SWORD 1 <SQL_C_CHAR> 
PTR 0x01150F60 
SQLLEN 4097 
SQLLEN * 0x0012F5E4 
... 
... 
... 
... 
config 2dc-180 ENTER SQLGetData 
HSTMT 020D1BB0 
UWORD 1 
SWORD 1 <SQL_C_CHAR> 
PTR 0x01150F60 
SQLLEN 4097 
SQLLEN * 0x0012F5E4 

config 2dc-180 EXIT SQLGetData with return code 100 (SQL_NO_DATA_FOUND) 
HSTMT 020D1BB0 
UWORD 1 
SWORD 1 <SQL_C_CHAR> 
PTR 0x01150F60 
SQLLEN 4097 
SQLLEN * 0x0012F5E4

How to repeat:
script test.sql: 
================ 
drop table XXT001I; 
create table XXT001I (XX000 Integer, XX001 TEXT ) ENGINE=INNODB DEFAULT CHARSET=cp1250; 
INSERT INTO XXT001I (XX000,XX001) VALUES (1,CONCAT(REPEAT('X',4096),'0')); 

drop table XXT001M; 
create table XXT001M (XX000 Integer, XX001 TEXT ) ENGINE=MYISAM DEFAULT CHARSET=cp1250; 
INSERT INTO XXT001M (XX000,XX001) VALUES (1,CONCAT(REPEAT('X',4096),'0')); 

VFP source code: 
================ 
#define SQL_OPT_TRACE 104 
#define SQL_OPT_TRACEFILE 105 

#define SQL_IS_INTEGER (-6) 

DECLARE integer SQLSetConnectAttr in odbc32.dll integer, integer, string @, integer 
DECLARE integer SQLSetConnectAttr in odbc32.dll AS SQLSetConnectAttrI integer, integer, integer, integer 

LOCAL lihdbc,liHODBC,liLen,liPom 
liLen=0 
lihdbc=SQLSTRINGCONNECT("uid=XXX;pwd=XXX;driver={MySQL Connector/ODBC v5};Database=anydb;SERVER=localhost;PORT=3506;OPTION=0;STMT=SET NAMES cp1250") 
*lihdbc=SQLSTRINGCONNECT("uid=XXX;pwd=XXX;driver={MySQL ODBC 3.51 Driver};Database=anydb;SERVER=localhost;PORT=3506;OPTION=0;STMT=SET NAMES cp1250") 

liHODBC=SQLGETPROP(lihdbc,"ODBChdbc") 

lcPom="e:\mysql-bug\ODBC 3.51-5.00, TEXT, length more 4096 = hungup.log" 
=SQLSetConnectAttr(liHODBC, SQL_OPT_TRACEFILE, @lcPom, LEN(lcPom)) 

liPom=1 
=SQLSetConnectAttrI(liHODBC, SQL_OPT_TRACE, liPom, SQL_IS_INTEGER) 

=SQLEXEC(lihdbc,"SELECT XX001 FROM XXT001I") && hangup 
=SQLEXEC(lihdbc,"SELECT XX001 FROM XXT001M") 

liPom=0 
=SQLSetConnectAttrI(liHODBC, SQL_OPT_TRACE, liPom, SQL_IS_INTEGER) 

?SQLDISCONNECT(lihdbc)
[14 Aug 2007 7:10] Susanne Ebrecht
Hi Martina,

Thank you for writing a bug report.
please test, if the error occurs by MyODBC 3.51.19 too.

Regards,

Susanne
[14 Aug 2007 16:13] Martina Jindrů
No bugs.
[14 Aug 2007 18:32] Tonci Grgin
Thank you for your bug report. This issue has already been fixed in the latest released version of that product, which you can download at

  http://www.mysql.com/downloads/

Explanation: Hi Martina and thanks for your report. If I understood you correctly, the problem is gone with MyODBC 3.51.19. If that's not the case, please reopen the report.