Uploaded image for project: 'Apache Trafodion (Retired)'
  1. Apache Trafodion (Retired)
  2. TRAFODION-2536

memory out of bound when fetch LONGVARCHAR UCS2 column with a TIMESTAMP_STRUCT

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Critical
    • Resolution: Unresolved
    • 2.1-incubating
    • None
    • client-odbc-linux
    • None

    Description

      please see code below:

      void checkIllegalAccess(SQLHANDLE hstmt)
      {
      SQLRETURN retcode;
      char buf1[1024] = "hello";
      TIMESTAMP_STRUCT CTimestampOutput[9];
      SQLLEN olen;
      char buf2[1024] = "world";

      retcode = SQLExecDirect(hstmt, (SQLCHAR*)"CREATE TABLE SQLTOTIMESTAMP(C1 CHAR(30),C2 VARCHAR(30),C3 DATE,C4 TIME,C5 TIMESTAMP,C6 LONG VARCHAR,C7 NCHAR(30),C8 NCHAR VARYING(30),C9 LONG VARCHAR CHARACTER SET UCS2) NO PARTITION", SQL_NTS);
      retcode = SQLExecDirect(hstmt, (SQLCHAR*)"INSERT INTO SQLTOTIMESTAMP VALUES ('1997-10-11 03:45:04.34', '1999-01-01 15:29:42.321',

      { d '1993-12-30' }

      ,

      { t '10:11:12' }

      ,

      { ts '1992-12-31 23:45:23.123456' }

      , '1998-12-23 10:49:02.654321', _UCS2'1997-10-11 03:45:04.34', _UCS2'1999-01-01 15:29:42.321', _UCS2'1998-12-23 10:49:02.654321')", SQL_NTS);
      retcode = SQLExecDirect(hstmt, (SQLCHAR*)"SELECT * FROM SQLTOTIMESTAMP", SQL_NTS);

      for (int i = 0; i < 9; i++)

      { retcode = SQLBindCol(hstmt, i+1, SQL_C_TIMESTAMP, &CTimestampOutput[i], 0, &olen); }

      retcode = SQLFetch(hstmt); //<<============ SQLFetch will change value of buf1 here.
      printf("%s,%s\n", buf1, buf2);
      return;
      }

      Attachments

        1. main.cpp
          4 kB
          苏锦佩

        Activity

          People

            weiqxu Weiqing Xu
            sujinpei 苏锦佩
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: