未验证 提交 702c88a6 编写于 作者: Y Yang Zhao 提交者: GitHub

[TD-11155]<fix> taosdemo stmt heap buffer overflow (#8738)

* [TD-11155]<fix> taosdemo stmt heap buffer overflow

* fix cmdline stmt heap buffer overflow
上级 44ece9a1
...@@ -4956,21 +4956,27 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -4956,21 +4956,27 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
if (0 == strncasecmp(superTbls->columns[c].dataType, if (0 == strncasecmp(superTbls->columns[c].dataType,
"INT", strlen("INT"))) { "INT", strlen("INT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_INT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_INT;
superTbls->columns[c].dataLen = sizeof(int);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"TINYINT", strlen("TINYINT"))) { "TINYINT", strlen("TINYINT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_TINYINT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_TINYINT;
superTbls->columns[c].dataLen = sizeof(char);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"SMALLINT", strlen("SMALLINT"))) { "SMALLINT", strlen("SMALLINT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_SMALLINT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_SMALLINT;
superTbls->columns[c].dataLen = sizeof(int16_t);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"BIGINT", strlen("BIGINT"))) { "BIGINT", strlen("BIGINT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_BIGINT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_BIGINT;
superTbls->columns[c].dataLen = sizeof(int64_t);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"FLOAT", strlen("FLOAT"))) { "FLOAT", strlen("FLOAT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_FLOAT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_FLOAT;
superTbls->columns[c].dataLen = sizeof(float);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"DOUBLE", strlen("DOUBLE"))) { "DOUBLE", strlen("DOUBLE"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_DOUBLE; superTbls->columns[c].data_type = TSDB_DATA_TYPE_DOUBLE;
superTbls->columns[c].dataLen = sizeof(double);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"BINARY", strlen("BINARY"))) { "BINARY", strlen("BINARY"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_BINARY; superTbls->columns[c].data_type = TSDB_DATA_TYPE_BINARY;
...@@ -4980,21 +4986,27 @@ static bool getColumnAndTagTypeFromInsertJsonFile( ...@@ -4980,21 +4986,27 @@ static bool getColumnAndTagTypeFromInsertJsonFile(
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"BOOL", strlen("BOOL"))) { "BOOL", strlen("BOOL"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_BOOL; superTbls->columns[c].data_type = TSDB_DATA_TYPE_BOOL;
superTbls->columns[c].dataLen = sizeof(char);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"TIMESTAMP", strlen("TIMESTAMP"))) { "TIMESTAMP", strlen("TIMESTAMP"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_TIMESTAMP; superTbls->columns[c].data_type = TSDB_DATA_TYPE_TIMESTAMP;
superTbls->columns[c].dataLen = sizeof(int64_t);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"UTINYINT", strlen("UTINYINT"))) { "UTINYINT", strlen("UTINYINT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_UTINYINT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_UTINYINT;
superTbls->columns[c].dataLen = sizeof(char);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"USMALLINT", strlen("USMALLINT"))) { "USMALLINT", strlen("USMALLINT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_USMALLINT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_USMALLINT;
superTbls->columns[c].dataLen = sizeof(uint16_t);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"UINT", strlen("UINT"))) { "UINT", strlen("UINT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_UINT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_UINT;
superTbls->columns[c].dataLen = sizeof(uint32_t);
} else if (0 == strncasecmp(superTbls->columns[c].dataType, } else if (0 == strncasecmp(superTbls->columns[c].dataType,
"UBIGINT", strlen("UBIGINT"))) { "UBIGINT", strlen("UBIGINT"))) {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_UBIGINT; superTbls->columns[c].data_type = TSDB_DATA_TYPE_UBIGINT;
superTbls->columns[c].dataLen = sizeof(uint64_t);
} else { } else {
superTbls->columns[c].data_type = TSDB_DATA_TYPE_NULL; superTbls->columns[c].data_type = TSDB_DATA_TYPE_NULL;
} }
...@@ -8555,7 +8567,7 @@ static int parseSamplefileToStmtBatch( ...@@ -8555,7 +8567,7 @@ static int parseSamplefileToStmtBatch(
case TSDB_DATA_TYPE_BINARY: case TSDB_DATA_TYPE_BINARY:
case TSDB_DATA_TYPE_NCHAR: case TSDB_DATA_TYPE_NCHAR:
tmpP = calloc(1, MAX_SAMPLES * tmpP = calloc(1, MAX_SAMPLES *
(((stbInfo)?stbInfo->columns[c].dataLen:g_args.binwidth))); (((stbInfo)?stbInfo->columns[c].dataLen:g_args.binwidth) + 1));
assert(tmpP); assert(tmpP);
*(uintptr_t*)(sampleBindBatchArray+ sizeof(uintptr_t*)*c) = (uintptr_t)tmpP; *(uintptr_t*)(sampleBindBatchArray+ sizeof(uintptr_t*)*c) = (uintptr_t)tmpP;
break; break;
...@@ -12016,7 +12028,35 @@ static void setParaFromArg() { ...@@ -12016,7 +12028,35 @@ static void setParaFromArg() {
tstrncpy(g_Dbs.db[0].superTbls[0].columns[i].dataType, tstrncpy(g_Dbs.db[0].superTbls[0].columns[i].dataType,
type, min(DATATYPE_BUFF_LEN, strlen(type) + 1)); type, min(DATATYPE_BUFF_LEN, strlen(type) + 1));
} else { } else {
g_Dbs.db[0].superTbls[0].columns[i].dataLen = g_args.binwidth; switch (g_Dbs.db[0].superTbls[0].columns[i].data_type){
case TSDB_DATA_TYPE_BOOL:
case TSDB_DATA_TYPE_UTINYINT:
case TSDB_DATA_TYPE_TINYINT:
g_Dbs.db[0].superTbls[0].columns[i].dataLen = sizeof(char);
break;
case TSDB_DATA_TYPE_SMALLINT:
case TSDB_DATA_TYPE_USMALLINT:
g_Dbs.db[0].superTbls[0].columns[i].dataLen = sizeof(int16_t);
break;
case TSDB_DATA_TYPE_INT:
case TSDB_DATA_TYPE_UINT:
g_Dbs.db[0].superTbls[0].columns[i].dataLen = sizeof(int32_t);
break;
case TSDB_DATA_TYPE_TIMESTAMP:
case TSDB_DATA_TYPE_BIGINT:
case TSDB_DATA_TYPE_UBIGINT:
g_Dbs.db[0].superTbls[0].columns[i].dataLen = sizeof(int64_t);
break;
case TSDB_DATA_TYPE_FLOAT:
g_Dbs.db[0].superTbls[0].columns[i].dataLen = sizeof(float);
break;
case TSDB_DATA_TYPE_DOUBLE:
g_Dbs.db[0].superTbls[0].columns[i].dataLen = sizeof(double);
break;
default:
g_Dbs.db[0].superTbls[0].columns[i].dataLen = g_args.binwidth;
break;
}
tstrncpy(g_Dbs.db[0].superTbls[0].columns[i].dataType, tstrncpy(g_Dbs.db[0].superTbls[0].columns[i].dataType,
dataType[i], min(DATATYPE_BUFF_LEN, strlen(dataType[i]) + 1)); dataType[i], min(DATATYPE_BUFF_LEN, strlen(dataType[i]) + 1));
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册