Merge pull request #12647 from taosdata/fix/invalid_read
Fix/invalid read
This commit is contained in:
commit
cb37bb3562
|
@ -316,46 +316,57 @@ int32_t indexConvertDataToStr(void* src, int8_t type, void** dst) {
|
||||||
case TSDB_DATA_TYPE_TIMESTAMP:
|
case TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(int64_t*)src, *dst, -1);
|
indexInt2str(*(int64_t*)src, *dst, -1);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BOOL:
|
case TSDB_DATA_TYPE_BOOL:
|
||||||
case TSDB_DATA_TYPE_UTINYINT:
|
case TSDB_DATA_TYPE_UTINYINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(uint8_t*)src, *dst, 1);
|
indexInt2str(*(uint8_t*)src, *dst, 1);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_TINYINT:
|
case TSDB_DATA_TYPE_TINYINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(int8_t*)src, *dst, 1);
|
indexInt2str(*(int8_t*)src, *dst, 1);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_SMALLINT:
|
case TSDB_DATA_TYPE_SMALLINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(int16_t*)src, *dst, -1);
|
indexInt2str(*(int16_t*)src, *dst, -1);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_USMALLINT:
|
case TSDB_DATA_TYPE_USMALLINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(uint16_t*)src, *dst, -1);
|
indexInt2str(*(uint16_t*)src, *dst, -1);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_INT:
|
case TSDB_DATA_TYPE_INT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(int32_t*)src, *dst, -1);
|
indexInt2str(*(int32_t*)src, *dst, -1);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_UINT:
|
case TSDB_DATA_TYPE_UINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(uint32_t*)src, *dst, 1);
|
indexInt2str(*(uint32_t*)src, *dst, 1);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_BIGINT:
|
case TSDB_DATA_TYPE_BIGINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
sprintf(*dst, "%" PRIu64, *(uint64_t*)src);
|
sprintf(*dst, "%" PRIu64, *(uint64_t*)src);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_UBIGINT:
|
case TSDB_DATA_TYPE_UBIGINT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
indexInt2str(*(uint64_t*)src, *dst, 1);
|
indexInt2str(*(uint64_t*)src, *dst, 1);
|
||||||
|
tlen = strlen(*dst);
|
||||||
case TSDB_DATA_TYPE_FLOAT:
|
case TSDB_DATA_TYPE_FLOAT:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
sprintf(*dst, "%.9lf", *(float*)src);
|
sprintf(*dst, "%.9lf", *(float*)src);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_DOUBLE:
|
case TSDB_DATA_TYPE_DOUBLE:
|
||||||
*dst = taosMemoryCalloc(1, bufSize + 1);
|
*dst = taosMemoryCalloc(1, bufSize + 1);
|
||||||
sprintf(*dst, "%.9lf", *(double*)src);
|
sprintf(*dst, "%.9lf", *(double*)src);
|
||||||
|
tlen = strlen(*dst);
|
||||||
break;
|
break;
|
||||||
case TSDB_DATA_TYPE_NCHAR: {
|
case TSDB_DATA_TYPE_NCHAR: {
|
||||||
tlen = taosEncodeBinary(NULL, varDataVal(src), varDataLen(src));
|
tlen = taosEncodeBinary(NULL, varDataVal(src), varDataLen(src));
|
||||||
|
|
|
@ -66,6 +66,17 @@ static void WriteData(SIndexJson* index, const std::string& colName, int8_t dtyp
|
||||||
|
|
||||||
indexMultiTermDestroy(terms);
|
indexMultiTermDestroy(terms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void delData(SIndexJson* index, const std::string& colName, int8_t dtype, void* data, int dlen, int tableId,
|
||||||
|
int8_t operType = DEL_VALUE) {
|
||||||
|
SIndexTerm* term =
|
||||||
|
indexTermCreate(1, (SIndexOperOnColumn)operType, dtype, colName.c_str(), colName.size(), (const char*)data, dlen);
|
||||||
|
SIndexMultiTerm* terms = indexMultiTermCreate();
|
||||||
|
indexMultiTermAdd(terms, term);
|
||||||
|
tIndexJsonPut(index, terms, (int64_t)tableId);
|
||||||
|
|
||||||
|
indexMultiTermDestroy(terms);
|
||||||
|
}
|
||||||
static void Search(SIndexJson* index, const std::string& colNam, int8_t dtype, void* data, int dlen, int8_t filterType,
|
static void Search(SIndexJson* index, const std::string& colNam, int8_t dtype, void* data, int dlen, int8_t filterType,
|
||||||
SArray** result) {
|
SArray** result) {
|
||||||
std::string colName(colNam);
|
std::string colName(colNam);
|
||||||
|
@ -580,38 +591,46 @@ TEST_F(JsonEnv, testWriteJsonTfileAndCache_FLOAT) {
|
||||||
}
|
}
|
||||||
TEST_F(JsonEnv, testWriteJsonTfileAndCache_DOUBLE) {
|
TEST_F(JsonEnv, testWriteJsonTfileAndCache_DOUBLE) {
|
||||||
{
|
{
|
||||||
double val = 10.0;
|
double val = 10.0;
|
||||||
std::string colName("test1");
|
|
||||||
for (int i = 0; i < 1000; i++) {
|
for (int i = 0; i < 1000; i++) {
|
||||||
WriteData(index, colName, TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), i);
|
WriteData(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
double val = 2.0;
|
double val = 2.0;
|
||||||
std::string colName("test1");
|
|
||||||
for (int i = 0; i < 1000; i++) {
|
for (int i = 0; i < 1000; i++) {
|
||||||
WriteData(index, colName, TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), i + 1000);
|
WriteData(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), i + 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
SArray* res = NULL;
|
SArray* res = NULL;
|
||||||
std::string colName("test1");
|
std::string colName("test1");
|
||||||
double val = 1.9;
|
double val = 1.9;
|
||||||
Search(index, colName, TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
|
Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
|
||||||
EXPECT_EQ(2000, taosArrayGetSize(res));
|
EXPECT_EQ(2000, taosArrayGetSize(res));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
SArray* res = NULL;
|
SArray* res = NULL;
|
||||||
std::string colName("test1");
|
double val = 2.1;
|
||||||
double val = 2.1;
|
Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
|
||||||
Search(index, colName, TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
|
|
||||||
EXPECT_EQ(1000, taosArrayGetSize(res));
|
EXPECT_EQ(1000, taosArrayGetSize(res));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::string colName("test1");
|
SArray* res = NULL;
|
||||||
SArray* res = NULL;
|
double val = 2.1;
|
||||||
double val = 2.1;
|
Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
|
||||||
Search(index, colName, TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_GREATER_EQUAL, &res);
|
EXPECT_EQ(1000, taosArrayGetSize(res));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
SArray* res = NULL;
|
||||||
|
double val = 10.0;
|
||||||
|
Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_LESS_EQUAL, &res);
|
||||||
|
EXPECT_EQ(2000, taosArrayGetSize(res));
|
||||||
|
}
|
||||||
|
{
|
||||||
|
SArray* res = NULL;
|
||||||
|
double val = 10.0;
|
||||||
|
Search(index, "test1", TSDB_DATA_TYPE_DOUBLE, &val, sizeof(val), QUERY_LESS_THAN, &res);
|
||||||
EXPECT_EQ(1000, taosArrayGetSize(res));
|
EXPECT_EQ(1000, taosArrayGetSize(res));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -264,6 +264,7 @@ static void uvHandleReq(SSrvConn* pConn) {
|
||||||
CONN_SHOULD_RELEASE(pConn, pHead);
|
CONN_SHOULD_RELEASE(pConn, pHead);
|
||||||
|
|
||||||
STransMsg transMsg;
|
STransMsg transMsg;
|
||||||
|
memset(&transMsg, 0, sizeof(transMsg));
|
||||||
transMsg.contLen = transContLenFromMsg(pHead->msgLen);
|
transMsg.contLen = transContLenFromMsg(pHead->msgLen);
|
||||||
transMsg.pCont = pHead->content;
|
transMsg.pCont = pHead->content;
|
||||||
transMsg.msgType = pHead->msgType;
|
transMsg.msgType = pHead->msgType;
|
||||||
|
|
Loading…
Reference in New Issue