Uploaded image for project: 'MariaDB Connector/J'
  1. MariaDB Connector/J
  2. CONJ-805

>1Byte UTF8 character issue if maxFieldSize is set

Details

    Description

      Detected at one of my clients.
      They use polish special characters like ść
      The length in TextRowProtocol is set to 2 for each of those characters so 4 in our example.
      With this the current code

      return new String(buf, pos, Math.min(maxFieldSize * 3, length), StandardCharsets.UTF_8) .substring(0, Math.min(maxFieldSize, length));
      

      results into an ArrayOutOfBoundsError at the substring() call.

      I added a test case and a quick fix for it.
      See
      https://github.com/mariadb-corporation/mariadb-connector-j/pull/156

      Travis fails on environment issues. Nothing to do with my change. I can not rerun them....

      Attachments

        Activity

          diego dupin Diego Dupin added a comment -

          The correction has 2 results :

          • Correction of possible ArrayOutOfBoundsError when using setMaxFieldSize
          • Correct behavior of setMaxFieldSize, limiting not length of the string, but byte length, as spec indicate :

            8.3.1 Silent Truncation. The Statement.setMaxFieldSize method allows a maximum size (in bytes) to be set. This limit applies only to the BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR, LONGVARCHAR, NCHAR, NVARCHAR, and LONGNVARCHAR data types. If a limit has been set using setMaxFieldSize and there is an attempt to read data that exceeds the limit, any truncation that occurs as a result of exceeding the set limit will not be reported.

          diego dupin Diego Dupin added a comment - The correction has 2 results : Correction of possible ArrayOutOfBoundsError when using setMaxFieldSize Correct behavior of setMaxFieldSize, limiting not length of the string, but byte length, as spec indicate : 8.3.1 Silent Truncation. The Statement.setMaxFieldSize method allows a maximum size (in bytes) to be set. This limit applies only to the BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR, LONGVARCHAR, NCHAR, NVARCHAR, and LONGNVARCHAR data types. If a limit has been set using setMaxFieldSize and there is an attempt to read data that exceeds the limit, any truncation that occurs as a result of exceeding the set limit will not be reported.

          People

            diego dupin Diego Dupin
            markus@markuslutum.de Markus Lutum
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.