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

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


The following commit(s) were added to refs/heads/master by this push:
     new 3320ed1  ODBC correct the length used for convert GBK to UTF8
     new 283ffe0  Merge pull request #1776 from Weixin-Xu/J3238
3320ed1 is described below

commit 3320ed1f10e34f4883e7a667d84e046a43a483ee
Author: Weixin-Xu <1013438...@qq.com>
AuthorDate: Tue Jan 22 15:40:28 2019 +0800

    ODBC correct the length used for convert GBK to UTF8
---
 win-odbc64/odbcclient/drvr35/Interface/odbcas_drvr.cpp | 1 +
 win-odbc64/odbcclient/drvr35/cconnect.cpp              | 3 ++-
 win-odbc64/odbcclient/drvr35/cconnect.h                | 1 +
 win-odbc64/security_dll/native/header/secpwd.h         | 2 +-
 win-odbc64/security_dll/native/source/secpwd.cpp       | 5 +++--
 5 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/win-odbc64/odbcclient/drvr35/Interface/odbcas_drvr.cpp 
b/win-odbc64/odbcclient/drvr35/Interface/odbcas_drvr.cpp
index 4b52a97..c47837b 100644
--- a/win-odbc64/odbcclient/drvr35/Interface/odbcas_drvr.cpp
+++ b/win-odbc64/odbcclient/drvr35/Interface/odbcas_drvr.cpp
@@ -323,6 +323,7 @@ odbcas_ASSvc_GetObjRefHdl_(
                {
                        memcpy(pConnection->m_ClusterName, curptr + 
msg_total_length, clusternameLength);
                        msg_total_length += clusternameLength;
+            pConnection->m_ClusterNameLength = clusternameLength;
                }
 
        }
diff --git a/win-odbc64/odbcclient/drvr35/cconnect.cpp 
b/win-odbc64/odbcclient/drvr35/cconnect.cpp
index e09ac3e..a52c612 100644
--- a/win-odbc64/odbcclient/drvr35/cconnect.cpp
+++ b/win-odbc64/odbcclient/drvr35/cconnect.cpp
@@ -59,6 +59,7 @@ CConnect::CConnect(SQLHANDLE InputHandle) : 
CHandle(SQL_HANDLE_DBC, InputHandle)
 
     lobHandleSave = NULL;
     lobHandleLenSave = 0;
+    m_ClusterNameLength = 0;
 }
 
 CConnect::~CConnect()
@@ -3394,7 +3395,7 @@ SQLRETURN CConnect::DoEncryption(SecPwd* &pSecPwd, 
ProcInfo SecInfo, USER_DESC_d
                                        dir[strlen(dir)-1] = '\0';
                                }
                        }
-                       pSecPwd = new SecPwd(dir, file, activefile, 
m_ClusterName);
+        pSecPwd = new SecPwd(dir, file, activefile, m_ClusterName, 
m_ClusterNameLength);
        } 
        catch (SecurityException se) {
                retCode = se.getErrCode();
diff --git a/win-odbc64/odbcclient/drvr35/cconnect.h 
b/win-odbc64/odbcclient/drvr35/cconnect.h
index 39df0ed..a6d4222 100644
--- a/win-odbc64/odbcclient/drvr35/cconnect.h
+++ b/win-odbc64/odbcclient/drvr35/cconnect.h
@@ -180,6 +180,7 @@ public:
        SecPwd*                 m_SecPwd;
        ProcInfo                m_SecInfo;
     char            m_ClusterName[MAX_SQL_IDENTIFIER_LEN+1]; // seaquest 
cluster name
+    int             m_ClusterNameLength;
 private:
        HANDLE                                          m_ConnectEvent;
        IDL_OBJECT_def                          m_RetSQLSvc_ObjRef;
diff --git a/win-odbc64/security_dll/native/header/secpwd.h 
b/win-odbc64/security_dll/native/header/secpwd.h
index 6878af7..23bf139 100644
--- a/win-odbc64/security_dll/native/header/secpwd.h
+++ b/win-odbc64/security_dll/native/header/secpwd.h
@@ -48,7 +48,7 @@ class SecPwd
 {  
    public:
       // cert_file - fully qualified certificate file name
-     SecPwd(const char *dir, const char* certFile, const char* activeCertFile, 
const char* serverName) 
+     SecPwd(const char *dir, const char* certFile, const char* activeCertFile, 
const char* serverName, int serverNameLength)
          throw (SecurityException);
       ~SecPwd();
 
diff --git a/win-odbc64/security_dll/native/source/secpwd.cpp 
b/win-odbc64/security_dll/native/source/secpwd.cpp
index 981c8ab..53bdca4 100644
--- a/win-odbc64/security_dll/native/source/secpwd.cpp
+++ b/win-odbc64/security_dll/native/source/secpwd.cpp
@@ -170,7 +170,8 @@ static char* buildName(const char* dir, const char* 
fileName, const char* server
 
 SecPwd::SecPwd(const char *dir, const char* fileName,
         const char* activeFileName,
-        const char* serverName) throw (SecurityException)
+        const char* serverName,
+        int serverNameLength) throw (SecurityException)
 : m_sec(NULL), certFile(NULL), activeCertFile(NULL)
 {
     char* dir_from_env = NULL;
@@ -224,7 +225,7 @@ SecPwd::SecPwd(const char *dir, const char* fileName,
     if (lcid == 0x804) // if local charset is gbk
     {
         serverNameGBKToUtf8 = (char *)malloc(MAX_SQL_IDENTIFIER_LEN + 1);
-        if (TranslateUTF8(TRUE, serverName, MAX_SQL_IDENTIFIER_LEN,
+        if (TranslateUTF8(TRUE, serverName, serverNameLength,
             serverNameGBKToUtf8, MAX_SQL_IDENTIFIER_LEN, &translen, 
transError) != SQL_SUCCESS)
         {
             free(serverNameGBKToUtf8);

Reply via email to