fix: avoid invalid read/write
This commit is contained in:
parent
20e90670e8
commit
9888d086c2
|
@ -99,7 +99,7 @@ void fstUnFinishedNodesAddSuffix(FstUnFinishedNodes* nodes, FstSlice bs, Output
|
||||||
if (fstSliceIsEmpty(s)) {
|
if (fstSliceIsEmpty(s)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
size_t sz = taosArrayGetSize(nodes->stack) - 1;
|
int32_t sz = taosArrayGetSize(nodes->stack) - 1;
|
||||||
FstBuilderNodeUnfinished* un = taosArrayGet(nodes->stack, sz);
|
FstBuilderNodeUnfinished* un = taosArrayGet(nodes->stack, sz);
|
||||||
assert(un->last == NULL);
|
assert(un->last == NULL);
|
||||||
|
|
||||||
|
@ -130,11 +130,11 @@ void fstUnFinishedNodesAddSuffix(FstUnFinishedNodes* nodes, FstSlice bs, Output
|
||||||
uint64_t fstUnFinishedNodesFindCommPrefix(FstUnFinishedNodes* node, FstSlice bs) {
|
uint64_t fstUnFinishedNodesFindCommPrefix(FstUnFinishedNodes* node, FstSlice bs) {
|
||||||
FstSlice* s = &bs;
|
FstSlice* s = &bs;
|
||||||
|
|
||||||
size_t ssz = taosArrayGetSize(node->stack); // stack size
|
int32_t ssz = taosArrayGetSize(node->stack); // stack size
|
||||||
uint64_t count = 0;
|
uint64_t count = 0;
|
||||||
int32_t lsz; // data len
|
int32_t lsz; // data len
|
||||||
uint8_t* data = fstSliceData(s, &lsz);
|
uint8_t* data = fstSliceData(s, &lsz);
|
||||||
for (size_t i = 0; i < ssz && i < lsz; i++) {
|
for (int32_t i = 0; i < ssz && i < lsz; i++) {
|
||||||
FstBuilderNodeUnfinished* un = taosArrayGet(node->stack, i);
|
FstBuilderNodeUnfinished* un = taosArrayGet(node->stack, i);
|
||||||
if (un->last->inp == data[i]) {
|
if (un->last->inp == data[i]) {
|
||||||
count++;
|
count++;
|
||||||
|
@ -147,8 +147,8 @@ uint64_t fstUnFinishedNodesFindCommPrefix(FstUnFinishedNodes* node, FstSlice bs)
|
||||||
uint64_t fstUnFinishedNodesFindCommPrefixAndSetOutput(FstUnFinishedNodes* node, FstSlice bs, Output in, Output* out) {
|
uint64_t fstUnFinishedNodesFindCommPrefixAndSetOutput(FstUnFinishedNodes* node, FstSlice bs, Output in, Output* out) {
|
||||||
FstSlice* s = &bs;
|
FstSlice* s = &bs;
|
||||||
|
|
||||||
size_t lsz = (size_t)(s->end - s->start + 1); // data len
|
int32_t lsz = (size_t)(s->end - s->start + 1); // data len
|
||||||
size_t ssz = taosArrayGetSize(node->stack); // stack size
|
int32_t ssz = taosArrayGetSize(node->stack); // stack size
|
||||||
*out = in;
|
*out = in;
|
||||||
uint64_t i = 0;
|
uint64_t i = 0;
|
||||||
for (i = 0; i < lsz && i < ssz; i++) {
|
for (i = 0; i < lsz && i < ssz; i++) {
|
||||||
|
@ -245,7 +245,7 @@ void fstStateCompileForOneTrans(FstCountingWriter* w, CompiledAddr addr, FstTran
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
void fstStateCompileForAnyTrans(FstCountingWriter* w, CompiledAddr addr, FstBuilderNode* node) {
|
void fstStateCompileForAnyTrans(FstCountingWriter* w, CompiledAddr addr, FstBuilderNode* node) {
|
||||||
size_t sz = taosArrayGetSize(node->trans);
|
int32_t sz = taosArrayGetSize(node->trans);
|
||||||
assert(sz <= 256);
|
assert(sz <= 256);
|
||||||
|
|
||||||
uint8_t tSize = 0;
|
uint8_t tSize = 0;
|
||||||
|
@ -253,7 +253,7 @@ void fstStateCompileForAnyTrans(FstCountingWriter* w, CompiledAddr addr, FstBuil
|
||||||
|
|
||||||
// finalOutput.is_zero()
|
// finalOutput.is_zero()
|
||||||
bool anyOuts = (node->finalOutput != 0);
|
bool anyOuts = (node->finalOutput != 0);
|
||||||
for (size_t i = 0; i < sz; i++) {
|
for (int32_t i = 0; i < sz; i++) {
|
||||||
FstTransition* t = taosArrayGet(node->trans, i);
|
FstTransition* t = taosArrayGet(node->trans, i);
|
||||||
tSize = TMAX(tSize, packDeltaSize(addr, t->addr));
|
tSize = TMAX(tSize, packDeltaSize(addr, t->addr));
|
||||||
oSize = TMAX(oSize, packSize(t->out));
|
oSize = TMAX(oSize, packSize(t->out));
|
||||||
|
@ -301,7 +301,7 @@ void fstStateCompileForAnyTrans(FstCountingWriter* w, CompiledAddr addr, FstBuil
|
||||||
/// for (uint8_t i = 0; i < 256; i++) {
|
/// for (uint8_t i = 0; i < 256; i++) {
|
||||||
// index[i] = 255;
|
// index[i] = 255;
|
||||||
///}
|
///}
|
||||||
for (size_t i = 0; i < sz; i++) {
|
for (int32_t i = 0; i < sz; i++) {
|
||||||
FstTransition* t = taosArrayGet(node->trans, i);
|
FstTransition* t = taosArrayGet(node->trans, i);
|
||||||
index[t->inp] = i;
|
index[t->inp] = i;
|
||||||
// fstPackDeltaIn(w, addr, t->addr, tSize);
|
// fstPackDeltaIn(w, addr, t->addr, tSize);
|
||||||
|
@ -731,7 +731,7 @@ bool fstNodeFindInput(FstNode* node, uint8_t b, uint64_t* res) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fstNodeCompile(FstNode* node, void* w, CompiledAddr lastAddr, CompiledAddr addr, FstBuilderNode* builderNode) {
|
bool fstNodeCompile(FstNode* node, void* w, CompiledAddr lastAddr, CompiledAddr addr, FstBuilderNode* builderNode) {
|
||||||
size_t sz = taosArrayGetSize(builderNode->trans);
|
int32_t sz = taosArrayGetSize(builderNode->trans);
|
||||||
assert(sz < 256);
|
assert(sz < 256);
|
||||||
if (sz == 0 && builderNode->isFinal && builderNode->finalOutput == 0) {
|
if (sz == 0 && builderNode->isFinal && builderNode->finalOutput == 0) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -959,8 +959,8 @@ void fstBuilderNodeUnfinishedAddOutputPrefix(FstBuilderNodeUnfinished* unNode, O
|
||||||
if (FST_BUILDER_NODE_IS_FINAL(unNode->node)) {
|
if (FST_BUILDER_NODE_IS_FINAL(unNode->node)) {
|
||||||
unNode->node->finalOutput += out;
|
unNode->node->finalOutput += out;
|
||||||
}
|
}
|
||||||
size_t sz = taosArrayGetSize(unNode->node->trans);
|
int32_t sz = taosArrayGetSize(unNode->node->trans);
|
||||||
for (size_t i = 0; i < sz; i++) {
|
for (int32_t i = 0; i < sz; i++) {
|
||||||
FstTransition* trn = taosArrayGet(unNode->node->trans, i);
|
FstTransition* trn = taosArrayGet(unNode->node->trans, i);
|
||||||
trn->out += out;
|
trn->out += out;
|
||||||
}
|
}
|
||||||
|
@ -1077,7 +1077,7 @@ bool fstGet(Fst* fst, FstSlice* b, Output* out) {
|
||||||
tOut = tOut + FST_NODE_FINAL_OUTPUT(root);
|
tOut = tOut + FST_NODE_FINAL_OUTPUT(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < taosArrayGetSize(nodes); i++) {
|
for (int32_t i = 0; i < taosArrayGetSize(nodes); i++) {
|
||||||
FstNode** node = (FstNode**)taosArrayGet(nodes, i);
|
FstNode** node = (FstNode**)taosArrayGet(nodes, i);
|
||||||
fstNodeDestroy(*node);
|
fstNodeDestroy(*node);
|
||||||
}
|
}
|
||||||
|
@ -1352,7 +1352,7 @@ StreamWithStateResult* streamWithStateNextWith(StreamWithState* sws, StreamCallb
|
||||||
StreamState s2 = {.node = nextNode, .trans = 0, .out = {.null = false, .out = out}, .autState = nextState};
|
StreamState s2 = {.node = nextNode, .trans = 0, .out = {.null = false, .out = out}, .autState = nextState};
|
||||||
taosArrayPush(sws->stack, &s2);
|
taosArrayPush(sws->stack, &s2);
|
||||||
|
|
||||||
size_t isz = taosArrayGetSize(sws->inp);
|
int32_t isz = taosArrayGetSize(sws->inp);
|
||||||
uint8_t* buf = (uint8_t*)taosMemoryMalloc(isz * sizeof(uint8_t));
|
uint8_t* buf = (uint8_t*)taosMemoryMalloc(isz * sizeof(uint8_t));
|
||||||
for (uint32_t i = 0; i < isz; i++) {
|
for (uint32_t i = 0; i < isz; i++) {
|
||||||
buf[i] = *(uint8_t*)taosArrayGet(sws->inp, i);
|
buf[i] = *(uint8_t*)taosArrayGet(sws->inp, i);
|
||||||
|
|
|
@ -116,7 +116,7 @@ TFileCache* tfileCacheCreate(const char* path) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
TFileHeader* header = &reader->header;
|
TFileHeader* header = &reader->header;
|
||||||
ICacheKey key = {.suid = header->suid, .colName = header->colName, .nColName = strlen(header->colName)};
|
ICacheKey key = {.suid = header->suid, .colName = header->colName, .nColName = (int32_t)strlen(header->colName)};
|
||||||
|
|
||||||
char buf[128] = {0};
|
char buf[128] = {0};
|
||||||
int32_t sz = indexSerialCacheKey(&key, buf);
|
int32_t sz = indexSerialCacheKey(&key, buf);
|
||||||
|
@ -230,7 +230,7 @@ static int32_t tfSearchTerm(void* reader, SIndexTerm* tem, SIdxTempResult* tr) {
|
||||||
indexInfo("index: %" PRIu64 ", col: %s, colVal: %s, found table info in tindex, time cost: %" PRIu64 "us",
|
indexInfo("index: %" PRIu64 ", col: %s, colVal: %s, found table info in tindex, time cost: %" PRIu64 "us",
|
||||||
tem->suid, tem->colName, tem->colVal, cost);
|
tem->suid, tem->colName, tem->colVal, cost);
|
||||||
|
|
||||||
ret = tfileReaderLoadTableIds((TFileReader*)reader, offset, tr->total);
|
ret = tfileReaderLoadTableIds((TFileReader*)reader, (int32_t)offset, tr->total);
|
||||||
cost = taosGetTimestampUs() - et;
|
cost = taosGetTimestampUs() - et;
|
||||||
indexInfo("index: %" PRIu64 ", col: %s, colVal: %s, load all table info, time cost: %" PRIu64 "us", tem->suid,
|
indexInfo("index: %" PRIu64 ", col: %s, colVal: %s, load all table info, time cost: %" PRIu64 "us", tem->suid,
|
||||||
tem->colName, tem->colVal, cost);
|
tem->colName, tem->colVal, cost);
|
||||||
|
@ -890,7 +890,7 @@ static int tfileWriteFooter(TFileWriter* write) {
|
||||||
char buf[sizeof(tfileMagicNumber) + 1] = {0};
|
char buf[sizeof(tfileMagicNumber) + 1] = {0};
|
||||||
void* pBuf = (void*)buf;
|
void* pBuf = (void*)buf;
|
||||||
taosEncodeFixedU64((void**)(void*)&pBuf, tfileMagicNumber);
|
taosEncodeFixedU64((void**)(void*)&pBuf, tfileMagicNumber);
|
||||||
int nwrite = write->ctx->write(write->ctx, buf, strlen(buf));
|
int nwrite = write->ctx->write(write->ctx, buf, (int32_t)strlen(buf));
|
||||||
|
|
||||||
indexInfo("tfile write footer size: %d", write->ctx->size(write->ctx));
|
indexInfo("tfile write footer size: %d", write->ctx->size(write->ctx));
|
||||||
assert(nwrite == sizeof(tfileMagicNumber));
|
assert(nwrite == sizeof(tfileMagicNumber));
|
||||||
|
|
|
@ -37,14 +37,14 @@ static int iBinarySearch(SArray *arr, int s, int e, uint64_t k) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void iIntersection(SArray *inters, SArray *final) {
|
void iIntersection(SArray *inters, SArray *final) {
|
||||||
int32_t sz = taosArrayGetSize(inters);
|
int32_t sz = (int32_t)taosArrayGetSize(inters);
|
||||||
if (sz <= 0) {
|
if (sz <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MergeIndex *mi = taosMemoryCalloc(sz, sizeof(MergeIndex));
|
MergeIndex *mi = taosMemoryCalloc(sz, sizeof(MergeIndex));
|
||||||
for (int i = 0; i < sz; i++) {
|
for (int i = 0; i < sz; i++) {
|
||||||
SArray *t = taosArrayGetP(inters, i);
|
SArray *t = taosArrayGetP(inters, i);
|
||||||
mi[i].len = taosArrayGetSize(t);
|
mi[i].len = (int32_t)taosArrayGetSize(t);
|
||||||
mi[i].idx = 0;
|
mi[i].idx = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ void iIntersection(SArray *inters, SArray *final) {
|
||||||
taosMemoryFreeClear(mi);
|
taosMemoryFreeClear(mi);
|
||||||
}
|
}
|
||||||
void iUnion(SArray *inters, SArray *final) {
|
void iUnion(SArray *inters, SArray *final) {
|
||||||
int32_t sz = taosArrayGetSize(inters);
|
int32_t sz = (int32_t)taosArrayGetSize(inters);
|
||||||
if (sz <= 0) {
|
if (sz <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ void iUnion(SArray *inters, SArray *final) {
|
||||||
MergeIndex *mi = taosMemoryCalloc(sz, sizeof(MergeIndex));
|
MergeIndex *mi = taosMemoryCalloc(sz, sizeof(MergeIndex));
|
||||||
for (int i = 0; i < sz; i++) {
|
for (int i = 0; i < sz; i++) {
|
||||||
SArray *t = taosArrayGetP(inters, i);
|
SArray *t = taosArrayGetP(inters, i);
|
||||||
mi[i].len = taosArrayGetSize(t);
|
mi[i].len = (int32_t)taosArrayGetSize(t);
|
||||||
mi[i].idx = 0;
|
mi[i].idx = 0;
|
||||||
}
|
}
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -117,8 +117,8 @@ void iUnion(SArray *inters, SArray *final) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void iExcept(SArray *total, SArray *except) {
|
void iExcept(SArray *total, SArray *except) {
|
||||||
int32_t tsz = taosArrayGetSize(total);
|
int32_t tsz = (int32_t)taosArrayGetSize(total);
|
||||||
int32_t esz = taosArrayGetSize(except);
|
int32_t esz = (int32_t)taosArrayGetSize(except);
|
||||||
if (esz == 0 || tsz == 0) {
|
if (esz == 0 || tsz == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -141,7 +141,10 @@ int uidCompare(const void *a, const void *b) {
|
||||||
// add more version compare
|
// add more version compare
|
||||||
uint64_t u1 = *(uint64_t *)a;
|
uint64_t u1 = *(uint64_t *)a;
|
||||||
uint64_t u2 = *(uint64_t *)b;
|
uint64_t u2 = *(uint64_t *)b;
|
||||||
return u1 - u2;
|
if (u1 == u2) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return u1 < u2 ? -1 : 1;
|
||||||
}
|
}
|
||||||
int verdataCompare(const void *a, const void *b) {
|
int verdataCompare(const void *a, const void *b) {
|
||||||
SIdxVerdata *va = (SIdxVerdata *)a;
|
SIdxVerdata *va = (SIdxVerdata *)a;
|
||||||
|
|
|
@ -48,7 +48,7 @@ class FstWriter {
|
||||||
|
|
||||||
class FstReadMemory {
|
class FstReadMemory {
|
||||||
public:
|
public:
|
||||||
FstReadMemory(size_t size, const std::string& fileName = "/tmp/tindex.tindex") {
|
FstReadMemory(int32_t size, const std::string& fileName = "/tmp/tindex.tindex") {
|
||||||
_wc = writerCtxCreate(TFile, fileName.c_str(), true, 64 * 1024);
|
_wc = writerCtxCreate(TFile, fileName.c_str(), true, 64 * 1024);
|
||||||
_w = fstCountingWriterCreate(_wc);
|
_w = fstCountingWriterCreate(_wc);
|
||||||
_size = size;
|
_size = size;
|
||||||
|
@ -152,7 +152,7 @@ class FstReadMemory {
|
||||||
Fst* _fst;
|
Fst* _fst;
|
||||||
FstSlice _s;
|
FstSlice _s;
|
||||||
WriterCtx* _wc;
|
WriterCtx* _wc;
|
||||||
size_t _size;
|
int32_t _size;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define L 100
|
#define L 100
|
||||||
|
|
Loading…
Reference in New Issue