mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-30713 field length handling for CONNECT engine
fp->field_length was unsigned and therefore the negative
condition around it.
Backport of cc182aca93
fixes it, however to correct the
consistent use of types pcf->Length needs to be unsigned
too.
At one point pcf->Precision is assigned from pcf->Length so
that's also unsigned.
GetTypeSize is assigned to length and has a length argument.
A -1 default value seemed dangerious to case, so at least 0
should assert if every hit.
This commit is contained in:
committed by
Andrew Hutchings
parent
3d27f6d7f4
commit
da1c91fb92
@@ -39,9 +39,9 @@ typedef struct _colinfo {
|
||||
PCSZ Name;
|
||||
int Type;
|
||||
int Offset;
|
||||
int Length;
|
||||
unsigned Length;
|
||||
int Key;
|
||||
int Precision;
|
||||
unsigned Precision;
|
||||
int Scale;
|
||||
int Opt;
|
||||
int Freq;
|
||||
|
@@ -1618,10 +1618,7 @@ void *ha_connect::GetColumnOption(PGLOBAL g, void *field, PCOLINFO pcf)
|
||||
pcf->Scale= 0;
|
||||
pcf->Opt= (fop) ? (int)fop->opt : 0;
|
||||
|
||||
if (fp->field_length >= 0)
|
||||
pcf->Length= fp->field_length;
|
||||
else
|
||||
pcf->Length= 256; // BLOB?
|
||||
|
||||
pcf->Precision= pcf->Length;
|
||||
|
||||
|
@@ -466,7 +466,7 @@ bool TDBEXT::MakeSQL(PGLOBAL g, bool cnt)
|
||||
|
||||
if (Quote) {
|
||||
// Tabname can have both database and table identifiers, we need to parse
|
||||
if (res= strstr(buf, "."))
|
||||
if ((res= strstr(buf, ".")))
|
||||
{
|
||||
// Parse schema
|
||||
my_len= res - buf + 1;
|
||||
|
@@ -163,7 +163,7 @@ PCSZ GetTypeName(int type)
|
||||
/***********************************************************************/
|
||||
/* GetTypeSize: returns the PlugDB internal type size. */
|
||||
/***********************************************************************/
|
||||
int GetTypeSize(int type, int len)
|
||||
unsigned GetTypeSize(int type, unsigned len)
|
||||
{
|
||||
switch (type) {
|
||||
case TYPE_DECIM:
|
||||
@@ -176,7 +176,7 @@ int GetTypeSize(int type, int len)
|
||||
case TYPE_DOUBLE: len = sizeof(double); break;
|
||||
case TYPE_TINY: len = sizeof(char); break;
|
||||
case TYPE_PCHAR: len = sizeof(char*); break;
|
||||
default: len = -1;
|
||||
default: len = 0;
|
||||
} // endswitch type
|
||||
|
||||
return len;
|
||||
|
@@ -41,7 +41,7 @@ typedef struct _datpar *PDTP; // For DTVAL
|
||||
/***********************************************************************/
|
||||
// Exported functions
|
||||
DllExport PCSZ GetTypeName(int);
|
||||
DllExport int GetTypeSize(int, int);
|
||||
DllExport unsigned GetTypeSize(int, unsigned);
|
||||
#ifdef ODBC_SUPPORT
|
||||
/* This function is exported for use in OEM table type DLLs */
|
||||
DllExport int TranslateSQLType(int stp, int prec,
|
||||
|
Reference in New Issue
Block a user