You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Sergey Kalashnikov (JIRA)" <ji...@apache.org> on 2017/09/27 12:22:00 UTC

[jira] [Commented] (IGNITE-6511) ODBC: SQLGetDiagRec doesn't follow specification when buffer size is too small

    [ 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)