fix: replace unsafe str fun and check return value
This commit is contained in:
parent
90642f4dc2
commit
036b7ebefa
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue