mirror of
https://github.com/MariaDB/server.git
synced 2025-11-27 05:41:41 +03:00
- Fix MDEV-16672 Connect: Warnings with 10.0
filamtxt.cpp: DOSFAM::RenameTempFile: Change sprintf to snprintf.
filamvct.cpp: VECFAM::RenameTempFile: Change sprintf to snprintf.
javaconn.cpp:
Add JAVAConn::GetUTFString function.
Use it instead of env->GetStringUTFChars.
Fix wrong identation.
javaconn.h: Add GetUTFString declaration.
jdbconn.cpp:
Use GetUTFString function instead of env->GetStringUTFChars.
jmgoconn.cpp:
Use GetUTFString function instead of env->GetStringUTFChars.
Fix wrong identation.
jsonudf.cpp: change 139 to BMX line 4631.
tabjmg.cpp:
Add ReleaseStringUTF.
Fix wrong identation.
tabpivot.cpp: Fix wrong identation.
tabutil.cpp: TDBPRX::GetSubTable: Change sprintf to snprintf.
modified: storage/connect/filamtxt.cpp
modified: storage/connect/filamvct.cpp
modified: storage/connect/javaconn.cpp
modified: storage/connect/javaconn.h
modified: storage/connect/jdbconn.cpp
modified: storage/connect/jmgoconn.cpp
modified: storage/connect/jsonudf.cpp
modified: storage/connect/tabjmg.cpp
modified: storage/connect/tabpivot.cpp
modified: storage/connect/tabutil.cpp
- Fix MDEV-16895 CONNECT engine's get_error_message can cause buffer
overflow and server crash with long queries
ha_connect_cc: Update version.
get_error_message: Remove charset conversion.
modified: storage/connect/ha_connect.cc
- Fix a server crash on inserting bigint to a JDBC table
JDBConn::SetUUID:
Suppress check on ctyp that causes a server crash because ctyp
can be negative and this triggers an DEBUG_ASSERT on return.
modified: storage/connect/jdbconn.cpp
- Delete an assert(qrp) from JCATPARM *AllocCatInfo that is called with
qrp=NULL from JDBConn::SetUUID. Also delete a clone of this function
that was duplicated in javaconn.cpp.
modified: storage/connect/javaconn.cpp
modified: storage/connect/jdbconn.cpp
- Update some disabled tests and results to avoid failure
modified: storage/connect/mysql-test/connect/r/jdbc.result
modified: storage/connect/mysql-test/connect/r/json_java_2.result
modified: storage/connect/mysql-test/connect/r/json_java_3.result
modified: storage/connect/mysql-test/connect/r/mongo_java_2.result
modified: storage/connect/mysql-test/connect/r/mongo_java_3.result
modified: storage/connect/mysql-test/connect/t/json_java_2.test
modified: storage/connect/mysql-test/connect/t/json_java_3.test
modified: storage/connect/mysql-test/connect/t/mongo_java_2.test
modified: storage/connect/mysql-test/connect/t/mongo_java_3.test
This commit is contained in:
@@ -1173,11 +1173,11 @@ int DOSFAM::RenameTempFile(PGLOBAL g)
|
||||
remove(filetemp); // May still be there from previous error
|
||||
|
||||
if (rename(filename, filetemp)) { // Save file for security
|
||||
sprintf(g->Message, MSG(RENAME_ERROR),
|
||||
snprintf(g->Message, MAX_STR, MSG(RENAME_ERROR),
|
||||
filename, filetemp, strerror(errno));
|
||||
throw 51;
|
||||
} else if (rename(tempname, filename)) {
|
||||
sprintf(g->Message, MSG(RENAME_ERROR),
|
||||
snprintf(g->Message, MAX_STR, MSG(RENAME_ERROR),
|
||||
tempname, filename, strerror(errno));
|
||||
rc = rename(filetemp, filename); // Restore saved file
|
||||
throw 52;
|
||||
|
||||
@@ -2458,11 +2458,11 @@ int VECFAM::RenameTempFile(PGLOBAL g)
|
||||
remove(filetemp); // May still be there from previous error
|
||||
|
||||
if (rename(filename, filetemp)) { // Save file for security
|
||||
sprintf(g->Message, MSG(RENAME_ERROR),
|
||||
snprintf(g->Message, MAX_STR, MSG(RENAME_ERROR),
|
||||
filename, filetemp, strerror(errno));
|
||||
rc = RC_FX;
|
||||
} else if (rename(tempname, filename)) {
|
||||
sprintf(g->Message, MSG(RENAME_ERROR),
|
||||
snprintf(g->Message, MAX_STR, MSG(RENAME_ERROR),
|
||||
tempname, filename, strerror(errno));
|
||||
rc = rename(filetemp, filename); // Restore saved file
|
||||
rc = RC_FX;
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
#define JSONMAX 10 // JSON Default max grp size
|
||||
|
||||
extern "C" {
|
||||
char version[]= "Version 1.06.0007 March 11, 2018";
|
||||
char version[]= "Version 1.06.0007 August 06, 2018";
|
||||
#if defined(__WIN__)
|
||||
char compver[]= "Version 1.06.0007 " __DATE__ " " __TIME__;
|
||||
char slash= '\\';
|
||||
@@ -3304,22 +3304,14 @@ bool ha_connect::get_error_message(int error, String* buf)
|
||||
DBUG_ENTER("ha_connect::get_error_message");
|
||||
|
||||
if (xp && xp->g) {
|
||||
PGLOBAL g= xp->g;
|
||||
char msg[3072]; // MAX_STR * 3
|
||||
uint dummy_errors;
|
||||
uint32 len= copy_and_convert(msg, strlen(g->Message) * 3,
|
||||
system_charset_info,
|
||||
g->Message, strlen(g->Message),
|
||||
&my_charset_latin1,
|
||||
&dummy_errors);
|
||||
PGLOBAL g = xp->g;
|
||||
|
||||
if (trace(1))
|
||||
htrc("GEM(%d): len=%u %s\n", error, len, g->Message);
|
||||
htrc("GEM(%d): %s\n", error, g->Message);
|
||||
|
||||
msg[len]= '\0';
|
||||
buf->copy(msg, (uint)strlen(msg), system_charset_info);
|
||||
buf->append(g->Message);
|
||||
} else
|
||||
buf->copy("Cannot retrieve msg", 19, system_charset_info);
|
||||
buf->append("Cannot retrieve error message");
|
||||
|
||||
DBUG_RETURN(false);
|
||||
} // end of get_error_message
|
||||
|
||||
@@ -81,29 +81,6 @@ GETDEF JAVAConn::GetDefaultJavaVMInitArgs = NULL;
|
||||
#define DEBUG_ONLY(f) ((void)0)
|
||||
#endif // !_DEBUG
|
||||
|
||||
/***********************************************************************/
|
||||
/* Allocate the structure used to refer to the result set. */
|
||||
/***********************************************************************/
|
||||
static JCATPARM *AllocCatInfo(PGLOBAL g, JCATINFO fid, PCSZ db,
|
||||
PCSZ tab, PQRYRES qrp)
|
||||
{
|
||||
JCATPARM *cap;
|
||||
|
||||
#if defined(_DEBUG)
|
||||
assert(qrp);
|
||||
#endif
|
||||
|
||||
if ((cap = (JCATPARM *)PlgDBSubAlloc(g, NULL, sizeof(JCATPARM)))) {
|
||||
memset(cap, 0, sizeof(JCATPARM));
|
||||
cap->Id = fid;
|
||||
cap->Qrp = qrp;
|
||||
cap->DB = db;
|
||||
cap->Tab = tab;
|
||||
} // endif cap
|
||||
|
||||
return cap;
|
||||
} // end of AllocCatInfo
|
||||
|
||||
/***********************************************************************/
|
||||
/* JAVAConn construction/destruction. */
|
||||
/***********************************************************************/
|
||||
@@ -138,6 +115,16 @@ JAVAConn::JAVAConn(PGLOBAL g, PCSZ wrapper)
|
||||
// EndCom();
|
||||
|
||||
// } // end of ~JAVAConn
|
||||
char *JAVAConn::GetUTFString(jstring s)
|
||||
{
|
||||
char *str;
|
||||
const char *utf = env->GetStringUTFChars(s, nullptr);
|
||||
|
||||
str = PlugDup(m_G, utf);
|
||||
env->ReleaseStringUTFChars(s, utf);
|
||||
env->DeleteLocalRef(s);
|
||||
return str;
|
||||
} // end of GetUTFString
|
||||
|
||||
/***********************************************************************/
|
||||
/* Screen for errors. */
|
||||
@@ -152,17 +139,15 @@ bool JAVAConn::Check(jint rc)
|
||||
"toString", "()Ljava/lang/String;");
|
||||
|
||||
if (exc != nullptr && tid != nullptr) {
|
||||
jstring s = (jstring)env->CallObjectMethod(exc, tid);
|
||||
const char *utf = env->GetStringUTFChars(s, (jboolean)false);
|
||||
env->DeleteLocalRef(s);
|
||||
Msg = PlugDup(m_G, utf);
|
||||
s = (jstring)env->CallObjectMethod(exc, tid);
|
||||
Msg = GetUTFString(s);
|
||||
} else
|
||||
Msg = "Exception occured";
|
||||
|
||||
env->ExceptionClear();
|
||||
} else if (rc < 0) {
|
||||
s = (jstring)env->CallObjectMethod(job, errid);
|
||||
Msg = (char*)env->GetStringUTFChars(s, (jboolean)false);
|
||||
Msg = GetUTFString(s);
|
||||
} else
|
||||
Msg = NULL;
|
||||
|
||||
|
||||
@@ -90,6 +90,7 @@ public:
|
||||
|
||||
// Java operations
|
||||
protected:
|
||||
char *GetUTFString(jstring s);
|
||||
bool gmID(PGLOBAL g, jmethodID& mid, const char *name, const char *sig);
|
||||
bool Check(jint rc = 0);
|
||||
|
||||
|
||||
@@ -322,10 +322,6 @@ static JCATPARM *AllocCatInfo(PGLOBAL g, JCATINFO fid, PCSZ db,
|
||||
{
|
||||
JCATPARM *cap;
|
||||
|
||||
#if defined(_DEBUG)
|
||||
assert(qrp);
|
||||
#endif
|
||||
|
||||
if ((cap = (JCATPARM *)PlgDBSubAlloc(g, NULL, sizeof(JCATPARM)))) {
|
||||
memset(cap, 0, sizeof(JCATPARM));
|
||||
cap->Id = fid;
|
||||
@@ -707,20 +703,13 @@ bool JDBConn::SetUUID(PGLOBAL g, PTDBJDBC tjp)
|
||||
goto err;
|
||||
} // endif rc
|
||||
|
||||
// Returns 666 is case of error
|
||||
//jtyp = env->CallIntMethod(job, typid, 5, nullptr);
|
||||
|
||||
//if (Check((jtyp == 666) ? -1 : 1)) {
|
||||
// sprintf(g->Message, "Getting jtyp: %s", Msg);
|
||||
// goto err;
|
||||
//} // endif ctyp
|
||||
|
||||
// Should return 666 is case of error (not done yet)
|
||||
ctyp = (int)env->CallIntMethod(job, intfldid, 5, nullptr);
|
||||
|
||||
if (Check(ctyp)) {
|
||||
sprintf(g->Message, "Getting ctyp: %s", Msg);
|
||||
goto err;
|
||||
} // endif ctyp
|
||||
//if (Check((ctyp == 666) ? -1 : 1)) {
|
||||
// sprintf(g->Message, "Getting ctyp: %s", Msg);
|
||||
// goto err;
|
||||
//} // endif ctyp
|
||||
|
||||
if (ctyp == 1111)
|
||||
((PJDBCCOL)colp)->uuid = true;
|
||||
@@ -836,11 +825,11 @@ bool JDBConn::Connect(PJPARM sop)
|
||||
jstring s = (jstring)env->CallObjectMethod(job, qcid);
|
||||
|
||||
if (s != nullptr) {
|
||||
char *qch = (char*)env->GetStringUTFChars(s, (jboolean)false);
|
||||
char *qch = GetUTFString(s);
|
||||
m_IDQuoteChar[0] = *qch;
|
||||
} else {
|
||||
s = (jstring)env->CallObjectMethod(job, errid);
|
||||
Msg = (char*)env->GetStringUTFChars(s, (jboolean)false);
|
||||
Msg = GetUTFString(s);
|
||||
} // endif s
|
||||
|
||||
} // endif qcid
|
||||
@@ -1018,7 +1007,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
|
||||
cn = nullptr;
|
||||
|
||||
if (cn) {
|
||||
field = env->GetStringUTFChars(cn, (jboolean)false);
|
||||
field = GetUTFString(cn);
|
||||
val->SetValue_psz((PSZ)field);
|
||||
} else
|
||||
val->Reset();
|
||||
@@ -1092,8 +1081,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
|
||||
cn = nullptr;
|
||||
|
||||
if (cn) {
|
||||
const char *field = env->GetStringUTFChars(cn, (jboolean)false);
|
||||
val->SetValue_psz((PSZ)field);
|
||||
val->SetValue_psz((PSZ)GetUTFString(cn));
|
||||
} else
|
||||
val->Reset();
|
||||
|
||||
@@ -1372,19 +1360,19 @@ bool JDBConn::SetParam(JDBCCOL *colp)
|
||||
for (i = 0, n = 0; i < size; i++) {
|
||||
crp = qrp->Colresp;
|
||||
js = (jstring)env->GetObjectArrayElement(s, n++);
|
||||
sval = (PSZ)env->GetStringUTFChars(js, 0);
|
||||
sval = GetUTFString(js);
|
||||
crp->Kdata->SetValue(sval, i);
|
||||
crp = crp->Next;
|
||||
js = (jstring)env->GetObjectArrayElement(s, n++);
|
||||
sval = (PSZ)env->GetStringUTFChars(js, 0);
|
||||
sval = GetUTFString(js);
|
||||
crp->Kdata->SetValue(sval, i);
|
||||
crp = crp->Next;
|
||||
js = (jstring)env->GetObjectArrayElement(s, n++);
|
||||
sval = (PSZ)env->GetStringUTFChars(js, 0);
|
||||
sval = GetUTFString(js);
|
||||
crp->Kdata->SetValue(sval, i);
|
||||
crp = crp->Next;
|
||||
js = (jstring)env->GetObjectArrayElement(s, n++);
|
||||
sval = (PSZ)env->GetStringUTFChars(js, 0);
|
||||
sval = GetUTFString(js);
|
||||
crp->Kdata->SetValue(sval, i);
|
||||
} // endfor i
|
||||
|
||||
@@ -1470,7 +1458,7 @@ bool JDBConn::SetParam(JDBCCOL *colp)
|
||||
return NULL;
|
||||
} // endif label
|
||||
|
||||
name = env->GetStringUTFChars(label, (jboolean)false);
|
||||
name = GetUTFString(label);
|
||||
crp = qrp->Colresp; // Column_Name
|
||||
crp->Kdata->SetValue((char*)name, i);
|
||||
n = env->GetIntArrayElements(val, 0);
|
||||
|
||||
@@ -522,7 +522,7 @@ PSZ JMgoConn::GetDocument(void)
|
||||
jdc = (jstring)env->CallObjectMethod(job, getdocid);
|
||||
|
||||
if (jdc)
|
||||
doc = (PSZ)env->GetStringUTFChars(jdc, (jboolean)false);
|
||||
doc = (PSZ)GetUTFString(jdc);
|
||||
|
||||
} // endif getdocid
|
||||
|
||||
@@ -807,7 +807,7 @@ PSZ JMgoConn::GetColumnValue(PSZ path)
|
||||
fn = (jstring)env->CallObjectMethod(job, objfldid, jn);
|
||||
|
||||
if (fn)
|
||||
fld = (PSZ)env->GetStringUTFChars(fn, (jboolean)false);
|
||||
fld = (PSZ)GetUTFString(fn);
|
||||
|
||||
} // endif objfldid
|
||||
|
||||
|
||||
@@ -4631,7 +4631,7 @@ char *jbin_array(UDF_INIT *initid, UDF_ARGS *args, char *result,
|
||||
bsp = NULL;
|
||||
|
||||
if (!bsp && (bsp = JbinAlloc(g, args, initid->max_length, NULL)))
|
||||
strncpy(bsp->Msg, g->Message, 139);
|
||||
strncpy(bsp->Msg, g->Message, BMX);
|
||||
|
||||
// Keep result of constant function
|
||||
g->Xchk = (initid->const_item) ? bsp : NULL;
|
||||
|
||||
@@ -238,8 +238,7 @@ DROP TABLE t1, connect.emp;
|
||||
CREATE TABLE t2 (command varchar(128) not null,number int(5) not null flag=1,message varchar(255) flag=2) ENGINE=CONNECT TABLE_TYPE=JDBC CONNECTION='jdbc:mariadb://localhost:PORT/connect' OPTION_LIST='User=root,Execsrc=1';
|
||||
SELECT * FROM t2 WHERE command='drop table tx1';
|
||||
command number message
|
||||
drop table tx1 0 Execute: java.sql.SQLSyntaxErrorException: Unknown table 'connect.tx1'
|
||||
Query is : drop table tx1
|
||||
drop table tx1 0 Execute: java.sql.SQLSyntaxErrorException: (conn:23) Unknown table 'connect.tx1'
|
||||
SELECT * FROM t2 WHERE command = 'create table tx1 (a int not null, b char(32), c double(8,2))';
|
||||
command number message
|
||||
create table tx1 (a int not null, b char(32), c double(8,2)) 0 Affected rows
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
|
||||
set connect_enable_mongo=1;
|
||||
#
|
||||
# Test the MONGO table type
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar';
|
||||
set connect_enable_mongo=1;
|
||||
#
|
||||
# Test the MONGO table type
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo2.jar';
|
||||
set connect_enable_mongo=1;
|
||||
#
|
||||
# Test the MONGO table type
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
SET GLOBAL connect_class_path='C:/MariaDB-10.2/MariaDB/storage/connect/mysql-test/connect/std_data/Mongo3.jar';
|
||||
set connect_enable_mongo=1;
|
||||
#
|
||||
# Test the MONGO table type
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
-- source jdbconn.inc
|
||||
-- source mongo.inc
|
||||
|
||||
--disable_query_log
|
||||
eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/Mongo2.jar';
|
||||
--enable_query_log
|
||||
let $DRV= Java;
|
||||
let $VERS= 2;
|
||||
let $TYPE= JSON;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
-- source jdbconn.inc
|
||||
-- source mongo.inc
|
||||
|
||||
--disable_query_log
|
||||
eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/Mongo3.jar';
|
||||
--enable_query_log
|
||||
let $DRV= Java;
|
||||
let $VERS= 3;
|
||||
let $TYPE= JSON;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
-- source jdbconn.inc
|
||||
-- source mongo.inc
|
||||
|
||||
--disable_query_log
|
||||
eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/Mongo2.jar';
|
||||
--enable_query_log
|
||||
let $DRV= Java;
|
||||
let $VERS= 2;
|
||||
let $TYPE= MONGO;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
-- source jdbconn.inc
|
||||
-- source mongo.inc
|
||||
|
||||
--disable_query_log
|
||||
eval SET GLOBAL connect_class_path='$MTR_SUITE_DIR/std_data/Mongo3.jar';
|
||||
--enable_query_log
|
||||
let $DRV= Java;
|
||||
let $VERS= 3;
|
||||
let $TYPE= MONGO;
|
||||
|
||||
@@ -72,7 +72,7 @@ bool JMGDISC::Find(PGLOBAL g)
|
||||
bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt,
|
||||
int ncol, int k)
|
||||
{
|
||||
const char *key;
|
||||
const char *key, *utf;
|
||||
char colname[65];
|
||||
char fmt[129];
|
||||
bool rc = true;
|
||||
@@ -101,7 +101,10 @@ bool JMGDISC::ColDesc(PGLOBAL g, jobject obj, char *pcn, char *pfmt,
|
||||
continue;
|
||||
|
||||
jkey = (jstring)Jcp->env->CallObjectMethod(Jcp->job, bvnameid);
|
||||
key = Jcp->env->GetStringUTFChars(jkey, (jboolean)false);
|
||||
utf = Jcp->env->GetStringUTFChars(jkey, nullptr);
|
||||
key = PlugDup(g, utf);
|
||||
Jcp->env->ReleaseStringUTFChars(jkey, utf);
|
||||
Jcp->env->DeleteLocalRef(jkey);
|
||||
|
||||
if (pcn) {
|
||||
strncpy(colname, pcn, 64);
|
||||
|
||||
@@ -429,7 +429,7 @@ PTDB TDBPRX::GetSubTable(PGLOBAL g, PTABLE tabp, bool b)
|
||||
char buf[MAX_STR];
|
||||
|
||||
strcpy(buf, g->Message);
|
||||
sprintf(g->Message, "Error accessing %s.%s: %s", db, name, buf);
|
||||
snprintf(g->Message, MAX_STR, "Error accessing %s.%s: %s", db, name, buf);
|
||||
hc->tshp = NULL;
|
||||
goto err;
|
||||
} // endif Define
|
||||
|
||||
Reference in New Issue
Block a user