Index: test/my_basics.c =================================================================== --- test/my_basics.c (revision 973) +++ test/my_basics.c (working copy) @@ -777,6 +777,31 @@ } +/* + Bug #10128 Error in evaluating simple mathematical expression + ADO calls SQLNativeSql with a NULL pointer for the result length, + but passes a non-NULL result buffer. +*/ +DECLARE_TEST(t_bug10128) +{ + SQLCHAR *query= (SQLCHAR *) "select 1,2,3,4"; + SQLCHAR nativesql[1000]; + SQLINTEGER nativelen; + SQLINTEGER querylen= (SQLINTEGER) strlen(query); + + ok_con(hdbc, SQLNativeSql(hdbc, query, SQL_NTS, NULL, 0, &nativelen)); + is_num(nativelen, querylen); + + nativelen= 999; + + ok_con(hdbc, SQLNativeSql(hdbc, query, SQL_NTS, nativesql, 1000, &nativelen)); + is_num(nativelen, querylen); + is_str(nativesql, query, querylen + 1); + + return OK; +} + + BEGIN_TESTS ADD_TEST(my_basics) ADD_TEST(t_max_select) @@ -798,6 +823,7 @@ ADD_TEST(setnames_conn) ADD_TEST(sqlcancel) ADD_TEST(t_bug32014) + ADD_TEST(t_bug10128) END_TESTS Index: driver/ansi.c =================================================================== --- driver/ansi.c (revision 973) +++ driver/ansi.c (working copy) @@ -857,7 +857,7 @@ if (in_len == SQL_NTS) in_len= strlen((char *)in); - if (out) + if (out_len) *out_len= in_len; (void)strncpy((char *)out, (const char *)in, out_max); Index: driver/unicode.c =================================================================== --- driver/unicode.c (revision 973) +++ driver/unicode.c (working copy) @@ -717,7 +717,7 @@ if (in_len == SQL_NTS) in_len= sqlwcharlen(in); - if (out) + if (out_len) *out_len= in_len; if (in_len > out_max) @@ -732,7 +732,7 @@ out[in_len]= 0; } - return SQL_SUCCESS; + return rc; }