mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
Fix crash when a line is not ended by \n.
modified: storage/connect/filamap.cpp Add specifying a password when reading zipped tables. modified: storage/connect/filamzip.cpp modified: storage/connect/filamzip.h modified: storage/connect/tabdos.cpp modified: storage/connect/tabdos.h Try Vaintroub suggestion modified: storage/connect/mysql-test/connect/t/jdbc.test
This commit is contained in:
parent
cf1ca74736
commit
efe9982873
6 changed files with 67 additions and 29 deletions
|
@ -301,10 +301,9 @@ int MAPFAM::SkipRecord(PGLOBAL g, bool header)
|
|||
PDBUSER dup = (PDBUSER)g->Activityp->Aptr;
|
||||
|
||||
// Skip this record
|
||||
while (*Mempos++ != '\n') ; // What about Unix ???
|
||||
|
||||
if (Mempos >= Top)
|
||||
return RC_EF;
|
||||
while (*Mempos++ != '\n') // What about Unix ???
|
||||
if (Mempos == Top)
|
||||
return RC_EF;
|
||||
|
||||
// Update progress information
|
||||
dup->ProgCur = GetPos();
|
||||
|
@ -320,7 +319,7 @@ int MAPFAM::SkipRecord(PGLOBAL g, bool header)
|
|||
/***********************************************************************/
|
||||
int MAPFAM::ReadBuffer(PGLOBAL g)
|
||||
{
|
||||
int rc, len;
|
||||
int rc, len, n = 1;
|
||||
|
||||
// Are we at the end of the memory
|
||||
if (Mempos >= Top) {
|
||||
|
@ -362,10 +361,14 @@ int MAPFAM::ReadBuffer(PGLOBAL g)
|
|||
Placed = false;
|
||||
|
||||
// Immediately calculate next position (Used by DeleteDB)
|
||||
while (*Mempos++ != '\n') ; // What about Unix ???
|
||||
while (*Mempos++ != '\n') // What about Unix ???
|
||||
if (Mempos == Top) {
|
||||
n = 0;
|
||||
break;
|
||||
} // endif Mempos
|
||||
|
||||
// Set caller line buffer
|
||||
len = (Mempos - Fpos) - 1;
|
||||
len = (Mempos - Fpos) - n;
|
||||
|
||||
// Don't rely on ENDING setting
|
||||
if (len > 0 && *(Mempos - 2) == '\r')
|
||||
|
@ -619,7 +622,9 @@ int MBKFAM::ReadBuffer(PGLOBAL g)
|
|||
} // endif's
|
||||
|
||||
// Immediately calculate next position (Used by DeleteDB)
|
||||
while (*Mempos++ != '\n') ; // What about Unix ???
|
||||
while (*Mempos++ != '\n') // What about Unix ???
|
||||
if (Mempos == Top)
|
||||
break;
|
||||
|
||||
// Set caller line buffer
|
||||
len = (Mempos - Fpos) - Ending;
|
||||
|
|
|
@ -386,6 +386,7 @@ UNZIPUTL::UNZIPUTL(PSZ tgt, bool mul)
|
|||
{
|
||||
zipfile = NULL;
|
||||
target = tgt;
|
||||
pwd = NULL;
|
||||
fp = NULL;
|
||||
memory = NULL;
|
||||
size = 0;
|
||||
|
@ -401,6 +402,26 @@ UNZIPUTL::UNZIPUTL(PSZ tgt, bool mul)
|
|||
#endif
|
||||
} // end of UNZIPUTL standard constructor
|
||||
|
||||
UNZIPUTL::UNZIPUTL(PDOSDEF tdp)
|
||||
{
|
||||
zipfile = NULL;
|
||||
target = tdp->GetEntry();
|
||||
pwd = tdp->Pwd;
|
||||
fp = NULL;
|
||||
memory = NULL;
|
||||
size = 0;
|
||||
entryopen = false;
|
||||
multiple = tdp->GetMul();
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
// Init the case mapping table.
|
||||
#if defined(__WIN__)
|
||||
for (int i = 0; i < 256; ++i) mapCaseTable[i] = toupper(i);
|
||||
#else
|
||||
for (int i = 0; i < 256; ++i) mapCaseTable[i] = i;
|
||||
#endif
|
||||
} // end of UNZIPUTL standard constructor
|
||||
|
||||
#if 0
|
||||
UNZIPUTL::UNZIPUTL(PZIPUTIL zutp)
|
||||
{
|
||||
|
@ -625,7 +646,7 @@ bool UNZIPUTL::openEntry(PGLOBAL g)
|
|||
if (rc != UNZ_OK) {
|
||||
sprintf(g->Message, "unzGetCurrentFileInfo64 rc=%d", rc);
|
||||
return true;
|
||||
} else if ((rc = unzOpenCurrentFile(zipfile)) != UNZ_OK) {
|
||||
} else if ((rc = unzOpenCurrentFilePassword(zipfile, pwd)) != UNZ_OK) {
|
||||
sprintf(g->Message, "unzOpen fn=%s rc=%d", fn, rc);
|
||||
return true;
|
||||
} // endif rc
|
||||
|
@ -675,15 +696,17 @@ void UNZIPUTL::closeEntry()
|
|||
UNZFAM::UNZFAM(PDOSDEF tdp) : MAPFAM(tdp)
|
||||
{
|
||||
zutp = NULL;
|
||||
target = tdp->GetEntry();
|
||||
mul = tdp->GetMul();
|
||||
tdfp = tdp;
|
||||
//target = tdp->GetEntry();
|
||||
//mul = tdp->GetMul();
|
||||
} // end of UNZFAM standard constructor
|
||||
|
||||
UNZFAM::UNZFAM(PUNZFAM txfp) : MAPFAM(txfp)
|
||||
{
|
||||
zutp = txfp->zutp;
|
||||
target = txfp->target;
|
||||
mul = txfp->mul;
|
||||
tdfp = txfp->tdfp;
|
||||
//target = txfp->target;
|
||||
//mul = txfp->mul;
|
||||
} // end of UNZFAM copy constructor
|
||||
|
||||
/***********************************************************************/
|
||||
|
@ -726,7 +749,7 @@ bool UNZFAM::OpenTableFile(PGLOBAL g)
|
|||
/*********************************************************************/
|
||||
/* Allocate the ZIP utility class. */
|
||||
/*********************************************************************/
|
||||
zutp = new(g) UNZIPUTL(target, mul);
|
||||
zutp = new(g) UNZIPUTL(tdfp);
|
||||
|
||||
// We used the file name relative to recorded datapath
|
||||
PlugSetPath(filename, To_File, Tdbp->GetPath());
|
||||
|
@ -841,17 +864,19 @@ void UNZFAM::CloseTableFile(PGLOBAL g, bool)
|
|||
UZXFAM::UZXFAM(PDOSDEF tdp) : MPXFAM(tdp)
|
||||
{
|
||||
zutp = NULL;
|
||||
target = tdp->GetEntry();
|
||||
mul = tdp->GetMul();
|
||||
tdfp = tdp;
|
||||
//target = tdp->GetEntry();
|
||||
//mul = tdp->GetMul();
|
||||
//Lrecl = tdp->GetLrecl();
|
||||
} // end of UZXFAM standard constructor
|
||||
|
||||
UZXFAM::UZXFAM(PUZXFAM txfp) : MPXFAM(txfp)
|
||||
{
|
||||
zutp = txfp->zutp;
|
||||
target = txfp->target;
|
||||
mul = txfp->mul;
|
||||
//Lrecl = txfp->Lrecl;
|
||||
tdfp = txfp->tdfp;
|
||||
//target = txfp->target;
|
||||
//mul = txfp->mul;
|
||||
//Lrecl = txfp->Lrecl;
|
||||
} // end of UZXFAM copy constructor
|
||||
|
||||
/***********************************************************************/
|
||||
|
@ -907,7 +932,7 @@ bool UZXFAM::OpenTableFile(PGLOBAL g)
|
|||
/* Allocate the ZIP utility class. */
|
||||
/*********************************************************************/
|
||||
if (!zutp)
|
||||
zutp = new(g)UNZIPUTL(target, mul);
|
||||
zutp = new(g)UNZIPUTL(tdfp);
|
||||
|
||||
// We used the file name relative to recorded datapath
|
||||
PlugSetPath(filename, To_File, Tdbp->GetPath());
|
||||
|
|
|
@ -45,6 +45,7 @@ class DllExport ZIPUTIL : public BLOCK {
|
|||
// Members
|
||||
zipFile zipfile; // The ZIP container file
|
||||
PSZ target; // The target file name
|
||||
PSZ pwd; // The ZIP file password
|
||||
//unz_file_info finfo; // The current file info
|
||||
PFBLOCK fp;
|
||||
//char *memory;
|
||||
|
@ -61,8 +62,8 @@ class DllExport ZIPUTIL : public BLOCK {
|
|||
class DllExport UNZIPUTL : public BLOCK {
|
||||
public:
|
||||
// Constructor
|
||||
UNZIPUTL(PSZ tgt, bool mul);
|
||||
//UNZIPUTL(UNZIPUTL *zutp);
|
||||
UNZIPUTL(PSZ tgt, bool mul);
|
||||
UNZIPUTL(PDOSDEF tdp);
|
||||
|
||||
// Implementation
|
||||
//PTXF Duplicate(PGLOBAL g) { return (PTXF) new(g)UNZFAM(this); }
|
||||
|
@ -80,6 +81,7 @@ class DllExport UNZIPUTL : public BLOCK {
|
|||
// Members
|
||||
unzFile zipfile; // The ZIP container file
|
||||
PSZ target; // The target file name
|
||||
PSZ pwd; // The ZIP file password
|
||||
unz_file_info finfo; // The current file info
|
||||
PFBLOCK fp;
|
||||
char *memory;
|
||||
|
@ -119,8 +121,9 @@ class DllExport UNZFAM : public MAPFAM {
|
|||
protected:
|
||||
// Members
|
||||
UNZIPUTL *zutp;
|
||||
PSZ target;
|
||||
bool mul;
|
||||
PDOSDEF tdfp;
|
||||
//PSZ target;
|
||||
//bool mul;
|
||||
}; // end of UNZFAM
|
||||
|
||||
/***********************************************************************/
|
||||
|
@ -147,8 +150,9 @@ class DllExport UZXFAM : public MPXFAM {
|
|||
protected:
|
||||
// Members
|
||||
UNZIPUTL *zutp;
|
||||
PSZ target;
|
||||
bool mul;
|
||||
PDOSDEF tdfp;
|
||||
//PSZ target;
|
||||
//bool mul;
|
||||
}; // end of UZXFAM
|
||||
|
||||
/***********************************************************************/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
-- source windows.inc
|
||||
-- source jdbconn.inc
|
||||
SET GLOBAL time_zone='+1:00';
|
||||
SET GLOBAL time_zone='+0:00';
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--copy_file $MTR_SUITE_DIR/std_data/girls.txt $MYSQLD_DATADIR/test/girls.txt
|
||||
|
@ -27,7 +27,8 @@ SELECT * FROM t2;
|
|||
--echo #
|
||||
USE test;
|
||||
--replace_result $PORT PORT
|
||||
--eval CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC TABNAME=t2 CONNECTION='jdbc:mysql://localhost:$PORT/connect?user=root'
|
||||
CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=JDBC TABNAME=t2
|
||||
CONNECTION="jdbc:mysql://localhost:3306/connect?user=root&globalVariables=time_zone='+0:00'&useSSL=false";
|
||||
SELECT * FROM t1;
|
||||
INSERT INTO t1 VALUES(786325481247, 'Hello!', '19:45:03', '1933-08-10', '1985-11-12 09:02:44', '2014-06-17 10:32:01');
|
||||
SELECT * FROM t1;
|
||||
|
|
|
@ -98,6 +98,7 @@ DOSDEF::DOSDEF(void)
|
|||
Ofn = NULL;
|
||||
Entry = NULL;
|
||||
To_Indx = NULL;
|
||||
Pwd = NULL;
|
||||
Recfm = RECFM_VAR;
|
||||
Mapped = false;
|
||||
Zipped = false;
|
||||
|
@ -139,7 +140,8 @@ bool DOSDEF::DefineAM(PGLOBAL g, LPCSTR am, int)
|
|||
: false;
|
||||
Mulentries = GetBoolCatInfo("Mulentries", Mulentries);
|
||||
Append = GetBoolCatInfo("Append", false);
|
||||
}
|
||||
Pwd = GetStringCatInfo(g, "Password", NULL);
|
||||
} // endif Zipped
|
||||
|
||||
Desc = Fn = GetStringCatInfo(g, "Filename", NULL);
|
||||
Ofn = GetStringCatInfo(g, "Optname", Fn);
|
||||
|
|
|
@ -77,6 +77,7 @@ class DllExport DOSDEF : public TABDEF { /* Logical table description */
|
|||
PSZ Fn; /* Path/Name of corresponding file */
|
||||
PSZ Ofn; /* Base Path/Name of matching index files*/
|
||||
PSZ Entry; /* Zip entry name or pattern */
|
||||
PSZ Pwd; /* Zip password */
|
||||
PIXDEF To_Indx; /* To index definitions blocks */
|
||||
RECFM Recfm; /* 0:VAR, 1:FIX, 2:BIN, 3:VCT, 6:DBF */
|
||||
bool Mapped; /* 0: disk file, 1: memory mapped file */
|
||||
|
|
Loading…
Reference in a new issue