This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new d0f17446687 JDBC: Fix IndexOutOfBoundsException when calling getBytes 
(#12662)
d0f17446687 is described below

commit d0f17446687b9f41e8cf630b5f0c55894ff61709
Author: Steve Yurong Su <[email protected]>
AuthorDate: Wed Jun 5 14:55:00 2024 +0800

    JDBC: Fix IndexOutOfBoundsException when calling getBytes (#12662)
    
    * JDBC: Fix ArrayOutOfBoundException when calling getBytes
    
    * Update JDBCCharsetExample.java
---
 .../src/main/java/org/apache/iotdb/JDBCCharsetExample.java   |  2 +-
 .../main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java  | 12 ++++++++++--
 .../src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java  |  8 +++++++-
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git 
a/example/jdbc/src/main/java/org/apache/iotdb/JDBCCharsetExample.java 
b/example/jdbc/src/main/java/org/apache/iotdb/JDBCCharsetExample.java
index 79ae881e301..3ecb9c05646 100644
--- a/example/jdbc/src/main/java/org/apache/iotdb/JDBCCharsetExample.java
+++ b/example/jdbc/src/main/java/org/apache/iotdb/JDBCCharsetExample.java
@@ -45,7 +45,7 @@ public class JDBCCharsetExample {
         final IoTDBStatement statement = (IoTDBStatement) 
connection.createStatement()) {
 
       final String insertSQLWithGB18030 =
-          "insert into root.测试(timestamp, 维语, 彝语, 繁体, 蒙文, 简体, 标点符号, 藏语) 
values(1, 'ئۇيغۇر تىلى', 'ꆈꌠꉙ', \"繁體\", 'ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡ', '简体', '——?!', 
\"བོད་སྐད།\");";
+          "insert into root.测试(timestamp, 彝语, 繁体, 蒙文, 简体, 标点符号, 藏语) values(1, 
'ꆈꌠꉙ', \"繁體\", 'ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡ', '简体', '——?!', \"བོད་སྐད།\");";
       final byte[] insertSQLWithGB18030Bytes = 
insertSQLWithGB18030.getBytes("GB18030");
       statement.execute(insertSQLWithGB18030Bytes);
     } catch (IoTDBSQLException e) {
diff --git 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
index 60fa9c98373..ab6009343aa 100644
--- 
a/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
+++ 
b/iotdb-client/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBJDBCResultSet.java
@@ -377,7 +377,11 @@ public class IoTDBJDBCResultSet implements ResultSet {
   @Override
   public byte[] getBytes(int columnIndex) throws SQLException {
     try {
-      return ioTDBRpcDataSet.getDataType(columnIndex).equals(TSDataType.BLOB)
+      final TSDataType dataType = ioTDBRpcDataSet.getDataType(columnIndex);
+      if (dataType == null) {
+        return null;
+      }
+      return dataType.equals(TSDataType.BLOB)
           ? ioTDBRpcDataSet.getBinary(columnIndex).getValues()
           : ioTDBRpcDataSet.getString(columnIndex).getBytes(charset);
     } catch (StatementExecutionException e) {
@@ -388,7 +392,11 @@ public class IoTDBJDBCResultSet implements ResultSet {
   @Override
   public byte[] getBytes(String columnName) throws SQLException {
     try {
-      return ioTDBRpcDataSet.getDataType(columnName).equals(TSDataType.BLOB)
+      final TSDataType dataType = ioTDBRpcDataSet.getDataType(columnName);
+      if (dataType == null) {
+        return null;
+      }
+      return dataType.equals(TSDataType.BLOB)
           ? ioTDBRpcDataSet.getBinary(columnName).getValues()
           : ioTDBRpcDataSet.getString(columnName).getBytes(charset);
     } catch (StatementExecutionException e) {
diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
index c32e310b65f..014c5eedae1 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java
@@ -528,7 +528,13 @@ public class IoTDBRpcDataSet {
   }
 
   public TSDataType getDataType(String columnName) throws 
StatementExecutionException {
-    return columnTypeDeduplicatedList.get(columnOrdinalMap.get(columnName) - 
START_INDEX);
+    if (columnName.equals(TIMESTAMP_STR)) {
+      return TSDataType.INT64;
+    }
+    final int index = columnOrdinalMap.get(columnName) - START_INDEX;
+    return index < 0 || index >= columnTypeDeduplicatedList.size()
+        ? null
+        : columnTypeDeduplicatedList.get(index);
   }
 
   public int findColumn(String columnName) {

Reply via email to