fix: replace unsafe str fun and check return value

This commit is contained in:
Alex Duan 2024-10-28 16:12:18 +08:00
parent 90642f4dc2
commit 036b7ebefa
2 changed files with 105 additions and 94 deletions

View File

@ -700,9 +700,9 @@ SWord* addWord(const char* p, int32_t len, bool pattern) {
// check format // check format
if (pattern && len > 0) { if (pattern && len > 0) {
if (p[len-1] == ';') { if (p[len - 1] == ';') {
word->type = wordType(p, len - 1); word->type = wordType(p, len - 1);
word->end = true; word->end = true;
} else { } else {
word->type = wordType(p, len); word->type = wordType(p, len);
} }
@ -1311,7 +1311,7 @@ void printScreen(TAOS* con, SShellCmd* cmd, SWords* match) {
// first tab press // first tab press
const char* str = NULL; const char* str = NULL;
int strLen = 0; int strLen = 0;
SWord* word = MATCH_WORD(match); SWord* word = MATCH_WORD(match);
if (firstMatchIndex == curMatchIndex && lastWordBytes == -1) { if (firstMatchIndex == curMatchIndex && lastWordBytes == -1) {
// first press tab // first press tab
@ -1331,14 +1331,18 @@ void printScreen(TAOS* con, SShellCmd* cmd, SWords* match) {
if (word->end && str[strLen - 1] != ';') { if (word->end && str[strLen - 1] != ';') {
// append end ';' // append end ';'
char *p = taosMemoryMalloc(strLen + 8); char* p = taosMemoryCalloc(strLen + 8, 1);
strcpy(p, str); if (p) {
strcat(p, ";"); tstrncpy(p, str, strLen);
shellInsertStr(cmd, (char *)p, strLen + 1); tstrncpy(p + strLen, ";", 1);
taosMemoryFree(p); shellInsertStr(cmd, (char*)p, strLen + 1);
taosMemoryFree(p);
} else {
shellInsertStr(cmd, (char*)str, strLen);
}
} else { } else {
// insert new // insert new
shellInsertStr(cmd, (char *)str, strLen); shellInsertStr(cmd, (char*)str, strLen);
} }
} }
@ -1722,27 +1726,27 @@ bool fieldOptionsArea(char* p) {
} }
// find tags // find tags
if(strstr(p, " tags") != NULL) { if (strstr(p, " tags") != NULL) {
return false; return false;
} }
if(p2 == NULL) { if (p2 == NULL) {
// first field area // first field area
p2 = p1; p2 = p1;
} }
// find blank count // find blank count
int32_t cnt = 0; int32_t cnt = 0;
while(p2) { while (p2) {
p2 = strchr(p2, ' '); p2 = strchr(p2, ' ');
if (p2) { if (p2) {
// get prev char // get prev char
char prec = *(p2 - 1); char prec = *(p2 - 1);
if (prec != ',' && prec != '(') { if (prec != ',' && prec != '(') {
// blank if before comma, not calc count. like st(ts timestamp, age int + BLANK + TAB only two blank // blank if before comma, not calc count. like st(ts timestamp, age int + BLANK + TAB only two blank
cnt ++; cnt++;
} }
// continue blank is one blank // continue blank is one blank
while (p2[1] != 0 && p2[1] == ' ') { while (p2[1] != 0 && p2[1] == ' ') {
// move next if blank again // move next if blank again
@ -1758,18 +1762,18 @@ bool fieldOptionsArea(char* p) {
// if is input create fields or tags area, return true // if is input create fields or tags area, return true
bool isCreateFieldsArea(char* p) { bool isCreateFieldsArea(char* p) {
int32_t n = 0; // count int32_t n = 0; // count
char *p1 = p; char* p1 = p;
while (*p1 != 0) { while (*p1 != 0) {
switch (*p1) { switch (*p1) {
case '(': case '(':
++ n; ++n;
break; break;
case ')': case ')':
-- n; --n;
break; break;
default: default:
break; break;
} }
// move next // move next
++p1; ++p1;
@ -1813,7 +1817,7 @@ bool matchCreateTable(TAOS* con, SShellCmd* cmd) {
char* last = lastWord(ps); char* last = lastWord(ps);
// check in create fields or tags input area // check in create fields or tags input area
if (isCreateFieldsArea(ps)) { if (isCreateFieldsArea(ps)) {
if (fieldOptionsArea(ps)) { if (fieldOptionsArea(ps)) {
// fill field options // fill field options
ret = fillWithType(con, cmd, last, WT_VAR_FIELD_OPTIONS); ret = fillWithType(con, cmd, last, WT_VAR_FIELD_OPTIONS);

View File

@ -17,56 +17,58 @@
#include <iostream> #include <iostream>
#include "shellAuto.h" #include "shellAuto.h"
TEST(fieldOptionsArea, autoTabTest) { TEST(fieldOptionsArea, autoTabTest) {
printf("hellow world SHELL tab test\n"); printf("hellow world SHELL tab test\n");
// str false // str false
const char *s0 [] = { const char *s0[] = {
"create table st(ts ", "create table st(ts ",
"create table st(ts timestamp, age ", "create table st(ts timestamp, age ",
"create table st(ts timestamp, age", "create table st(ts timestamp, age",
"create table st(ts timestamp, age int , name ", "create table st(ts timestamp, age int , name ",
"create table st(ts timestamp, age int , name binary(16)", "create table st(ts timestamp, age int , name binary(16)",
"create table st(ts timestamp, age int , name binary(16) ) tags( ", "create table st(ts timestamp, age int , name binary(16) ) tags( ",
"create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr ", "create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr ",
"create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary", "create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary",
"create table st(ts timestamp, age int, name binary(16)) tags(area int , addr varbinary(32)", "create table st(ts timestamp, age int, name binary(16)) tags(area int , addr varbinary(32)",
"create table st( ts timestamp, age int, name binary(16)) tags( area int, addr", "create table st( ts timestamp, age int, name binary(16)) tags( area int, addr",
"create table st (ts timestamp , age int, name binary(16) , area int,", "create table st (ts timestamp , age int, name binary(16) , area int,",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int ,addr varbinary", "create table st (ts timestamp , age int, name binary(16) ) tags ( area int ,addr varbinary",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level 'high' , no i", "create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level "
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode 'simple8b' level 'high', no in", "'high' , no i",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode "
"'simple8b' level 'high', no in",
}; };
// str true // str true
const char *s1 [] = { const char *s1[] = {
"create table st(ts timestamp ", "create table st(ts timestamp ",
"create table st(ts timestamp, age int ", "create table st(ts timestamp, age int ",
"create table st(ts timestamp, age int ", "create table st(ts timestamp, age int ",
"create table st(ts timestamp, age int , name binary(16) ", "create table st(ts timestamp, age int , name binary(16) ",
"create table st(ts timestamp, age int , name binary(16) ", "create table st(ts timestamp, age int , name binary(16) ",
"create table st(ts timestamp, age int , name binary(16) , addr varbinary( 32 ) ", "create table st(ts timestamp, age int , name binary(16) , addr varbinary( 32 ) ",
"create table st(ts timestamp, age int , name binary(16) ,area int, addr varbinary(32) ", "create table st(ts timestamp, age int , name binary(16) ,area int, addr varbinary(32) ",
"create table st(ts timestamp, age int , name binary(16), area int,addr varbinary(32) ", "create table st(ts timestamp, age int , name binary(16), area int,addr varbinary(32) ",
"create table st(ts timestamp, age int, name binary(16) , area int,addr varbinary(32) ", "create table st(ts timestamp, age int, name binary(16) , area int,addr varbinary(32) ",
"create table st( ts timestamp, age int, name binary(16) ,area int,addr varbinary(32) ", "create table st( ts timestamp, age int, name binary(16) ,area int,addr varbinary(32) ",
"create table st (ts timestamp , age int, name binary(16), area int,addr varbinary(32) ", "create table st (ts timestamp , age int, name binary(16), area int,addr varbinary(32) ",
"create table st (ts timestamp , age int, name binary(16), area int , addr varbinary(32) compress 'zlib' ", "create table st (ts timestamp , age int, name binary(16), area int , addr varbinary(32) compress 'zlib' ",
"create table st (ts timestamp , age int, name binary(16), area int , addr varbinary(32) level 'high' ", "create table st (ts timestamp , age int, name binary(16), area int , addr varbinary(32) level 'high' ",
"create table st (ts timestamp , age int, name binary(16) , area int , addr varbinary(32) encode 'simple8b' level 'high' ", "create table st (ts timestamp , age int, name binary(16) , area int , addr varbinary(32) encode 'simple8b' "
"level 'high' ",
}; };
// s0 is false // s0 is false
for(int32_t i = 0; i < sizeof(s0)/sizeof(char*) ; i++) { for (int32_t i = 0; i < sizeof(s0) / sizeof(char *); i++) {
printf("s0 i=%d fieldOptionsArea %s expect false \n", i, s0[i]); printf("s0 i=%d fieldOptionsArea %s expect false \n", i, s0[i]);
ASSERT (fieldOptionsArea((char *)s0[i]) == false); ASSERT(fieldOptionsArea((char *)s0[i]) == false);
} }
// s1 is true // s1 is true
for(int32_t i = 0; i < sizeof(s1)/sizeof(char*) ; i++) { for (int32_t i = 0; i < sizeof(s1) / sizeof(char *); i++) {
printf("s1 i=%d fieldOptionsArea %s expect true \n", i, s1[i]); printf("s1 i=%d fieldOptionsArea %s expect true \n", i, s1[i]);
ASSERT (fieldOptionsArea((char *)s1[i]) == true); ASSERT(fieldOptionsArea((char *)s1[i]) == true);
} }
} }
@ -74,51 +76,56 @@ TEST(isCreateFieldsArea, autoTabTest) {
printf("hellow world SHELL tab test\n"); printf("hellow world SHELL tab test\n");
// str false // str false
const char *s0 [] = { const char *s0[] = {
"create table st(ts )", "create table st(ts )",
"create table st(ts timestamp, age) ", "create table st(ts timestamp, age) ",
"create table st(ts timestamp, age)", "create table st(ts timestamp, age)",
"create table st(ts timestamp, age int , name binary(16) )", "create table st(ts timestamp, age int , name binary(16) )",
"create table st(ts timestamp, age int , name binary(16))", "create table st(ts timestamp, age int , name binary(16))",
"create table st(ts timestamp, age int , name binary(16) ) tags( )", "create table st(ts timestamp, age int , name binary(16) ) tags( )",
"create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr )", "create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr )",
"create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary)", "create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary)",
"create table st(ts timestamp, age int, name binary(16)) tags(area int , addr varbinary(32))", "create table st(ts timestamp, age int, name binary(16)) tags(area int , addr varbinary(32))",
"create table st( ts timestamp, age int, name binary(16)) tags( area int, addr int)", "create table st( ts timestamp, age int, name binary(16)) tags( area int, addr int)",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int,addr varbinary(32) )", "create table st (ts timestamp , age int, name binary(16) ) tags ( area int,addr varbinary(32) )",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int ,addr varbinary(14))", "create table st (ts timestamp , age int, name binary(16) ) tags ( area int ,addr varbinary(14))",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level 'high' )", "create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level "
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode 'simple8b' level 'high' ) ", "'high' )",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode "
"'simple8b' level 'high' ) ",
}; };
// str true // str true
const char *s1 [] = { const char *s1[] = {
"create table st(ts timestamp ", "create table st(ts timestamp ",
"create table st(ts timestamp, age int ", "create table st(ts timestamp, age int ",
"create table st(ts timestamp, age int ,", "create table st(ts timestamp, age int ,",
"create table st(ts timestamp, age int , name binary(16), ", "create table st(ts timestamp, age int , name binary(16), ",
"create table st(ts timestamp, age int , name binary(16) ", "create table st(ts timestamp, age int , name binary(16) ",
"create table st(ts timestamp, age int , name binary(16) ) tags( area int ", "create table st(ts timestamp, age int , name binary(16) ) tags( area int ",
"create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr varbinary(32) ", "create table st(ts timestamp, age int , name binary(16) ) tags( area int, addr varbinary(32) ",
"create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary(32)", "create table st(ts timestamp, age int , name binary(16) ) tags( area int,addr varbinary(32)",
"create table st(ts timestamp, age int, name binary(16)) tags(area int,addr varbinary(32) ", "create table st(ts timestamp, age int, name binary(16)) tags(area int,addr varbinary(32) ",
"create table st( ts timestamp, age int, name binary(16)) tags(area int,addr varbinary(32) ", "create table st( ts timestamp, age int, name binary(16)) tags(area int,addr varbinary(32) ",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int, addr varbinary(32) ", "create table st (ts timestamp , age int, name binary(16) ) tags ( area int, addr varbinary(32) ",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) compress 'zlib' ", "create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) compress "
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level 'high' ", "'zlib' ",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode 'simple8b' level 'high' ", "create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) level "
"'high' ",
"create table st (ts timestamp , age int, name binary(16) ) tags ( area int , addr varbinary(32) encode "
"'simple8b' level 'high' ",
}; };
// s0 is false // s0 is false
for(int32_t i = 0; i < sizeof(s0)/sizeof(char*) ; i++) { for (int32_t i = 0; i < sizeof(s0) / sizeof(char *); i++) {
printf("s0 i=%d isCreateFieldsArea %s expect false. \n", i, s0[i]); printf("s0 i=%d isCreateFieldsArea %s expect false. \n", i, s0[i]);
ASSERT (isCreateFieldsArea((char *)s0[i]) == false); ASSERT(isCreateFieldsArea((char *)s0[i]) == false);
} }
// s1 is true // s1 is true
for(int32_t i = 0; i < sizeof(s1)/sizeof(char*) ; i++) { for (int32_t i = 0; i < sizeof(s1) / sizeof(char *); i++) {
printf("s1 i=%d isCreateFieldsArea %s expect true. \n", i, s1[i]); printf("s1 i=%d isCreateFieldsArea %s expect true. \n", i, s1[i]);
ASSERT (isCreateFieldsArea((char *)s1[i]) == true); ASSERT(isCreateFieldsArea((char *)s1[i]) == true);
} }
} }