[
https://issues.apache.org/jira/browse/IGNITE-6511?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16182469#comment-16182469
]
Sergey Kalashnikov commented on IGNITE-6511:
--------------------------------------------
Workaround: check resulting error message length (reallen > 0) before
manipulation with the error message pointer.
Reproducer:
{quote}
BOOST_AUTO_TEST_CASE(TestLongErrorMessage)
{
StartAdditionalNode("Node1");
Connect("DRIVER={Apache Ignite};ADDRESS=127.0.0.1:11110;SCHEMA=PUBLIC");
SQLCHAR req[] = "DROP INDEX Nonexisting";
SQLRETURN ret;
ret = SQLExecDirect(stmt, req, SQL_NTS);
BOOST_REQUIRE_EQUAL(ret, SQL_ERROR);
SQLCHAR sqlstate[7] = {};
SQLINTEGER nativeCode;
SQLCHAR message[10];
SQLSMALLINT reallen = 0;
SQLGetDiagRec(SQL_HANDLE_STMT, stmt, 1, sqlstate, &nativeCode, message,
sizeof(message), &reallen);
BOOST_CHECK_EQUAL(reallen, sizeof(message));
}
{quote}
> ODBC: SQLGetDiagRec doesn't follow specification when buffer size is too small
> ------------------------------------------------------------------------------
>
> Key: IGNITE-6511
> URL: https://issues.apache.org/jira/browse/IGNITE-6511
> Project: Ignite
> Issue Type: Bug
> Components: odbc
> Reporter: Sergey Kalashnikov
> Labels: usability
>
> When buffer size provided for error message is not big enough to hold the
> entire error message, the function {{SqlGetDiagRec()}} returns wrong
> resulting string length (-4) and wrong result code ({{SQL_SUCCESS}} instead
> of {{SQL_SUCCESS_WITH_INFO}}).
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)