diff --git a/source/libs/index/src/indexFstDfa.c b/source/libs/index/src/indexFstDfa.c index b8ac3bd3f54ec8578b87e14cacb713c0247d021b..046ed0f4f4a16bc63fb588c850784d6a1ae066e7 100644 --- a/source/libs/index/src/indexFstDfa.c +++ b/source/libs/index/src/indexFstDfa.c @@ -126,7 +126,6 @@ bool dfaBuilderCacheState(FstDfaBuilder *builder, FstSparseSet *set, uint32_t *r for (int i = 0; i < sparSetLen(set); i++) { int32_t ip; - if (false == sparSetGet(set, i, &ip)) continue; Inst *inst = taosArrayGet(builder->dfa->insts, ip); diff --git a/source/libs/index/src/indexFstRegex.c b/source/libs/index/src/indexFstRegex.c index 0189e9fe6e13ffa3532937303ff3b5fb9366bd1b..e148f211f23a6acbf9bd81eed2dff13761a7800a 100644 --- a/source/libs/index/src/indexFstRegex.c +++ b/source/libs/index/src/indexFstRegex.c @@ -22,11 +22,8 @@ FstRegex *regexCreate(const char *str) { if (regex == NULL) { return NULL; } - int32_t sz = (int32_t)strlen(str); - char *orig = taosMemoryCalloc(1, sz); - memcpy(orig, str, sz); - regex->orig = orig; + regex->orig = tstrdup(str); // construct insts based on str SArray *insts = taosArrayInit(256, sizeof(uint8_t)); diff --git a/source/libs/index/src/indexFstSparse.c b/source/libs/index/src/indexFstSparse.c index 5fdd797aa8584f8fcb77e830219e5cba7e4802f3..60eb7afd90277def52d473a49461256c88608c04 100644 --- a/source/libs/index/src/indexFstSparse.c +++ b/source/libs/index/src/indexFstSparse.c @@ -52,7 +52,7 @@ bool sparSetAdd(FstSparseSet *ss, int32_t ip, int32_t *idx) { if (ss == NULL) { return false; } - if (ip >= ss->cap) { + if (ip >= ss->cap || ip < 0) { return false; } uint32_t i = ss->size; @@ -65,7 +65,7 @@ bool sparSetAdd(FstSparseSet *ss, int32_t ip, int32_t *idx) { return true; } bool sparSetGet(FstSparseSet *ss, int32_t idx, int32_t *ip) { - if (idx >= ss->cap || idx >= ss->size) { + if (idx >= ss->cap || idx >= ss->size || idx < 0) { return false; } int32_t val = ss->dense[idx]; @@ -75,12 +75,12 @@ bool sparSetGet(FstSparseSet *ss, int32_t idx, int32_t *ip) { return val == -1 ? false : true; } bool sparSetContains(FstSparseSet *ss, int32_t ip) { - if (ip >= ss->cap) { + if (ip >= ss->cap || ip < 0) { return false; } int32_t i = ss->sparse[ip]; - if (i < ss->cap && i < ss->size && ss->dense[i] == ip) { + if (i >= 0 && i < ss->cap && i < ss->size && ss->dense[i] == ip) { return true; } else { return false;