修复 TSG-7994 ,避免处理未知district时出现误命中。

This commit is contained in:
zhengchao
2021-10-11 12:00:26 +03:00
parent a2f2adc82a
commit 593bcfb907
5 changed files with 22 additions and 21 deletions

View File

@@ -200,7 +200,7 @@ void scan_region_hit_wraper_build_with_rulescan(struct scan_region_hit_wraper* w
for(i=0; i< n_rslt; i++)
{
region=(struct Maat_region_inner*)(rulescan_rslt[i].tag);
if(region->district_id==district_id||district_id==-1)
if(region->district_id==district_id||district_id==DISTRICT_ANY)
{
wraper->hit_regions[wraper->n_hit_region]=region;
wraper->n_hit_region++;
@@ -422,7 +422,7 @@ struct _OUTER_scan_status_t* _make_outer_status(_Maat_feather_t *feather, int th
struct _OUTER_scan_status_t* outer_mid=NULL;
outer_mid=(struct _OUTER_scan_status_t*)calloc(sizeof(struct _OUTER_scan_status_t),1);
outer_mid->feather=feather;
outer_mid->district_id=-1;
outer_mid->district_id=DISTRICT_ANY;
outer_mid->thread_num=(unsigned short)thread_num;
alignment_int64_array_add(feather->outer_mid_cnt, thread_num,1);
return outer_mid;
@@ -2481,7 +2481,7 @@ int Maat_set_scan_status(Maat_feather_t feather,scan_status_t* mid,enum MAAT_SCA
if(map_ret<0)
{
//May be the district is not effected yet.
_mid->district_id=-1;
_mid->district_id=DISTRICT_UNKNOWN;
}
_mid->is_set_district=1;
break;

View File

@@ -57,7 +57,7 @@ extern "C"
}
#endif
int MAAT_FRAME_VERSION_3_4_8_20210819=1;
int MAAT_FRAME_VERSION_3_4_9_20211011=1;
int is_valid_table_name(const char* str)
{
@@ -671,7 +671,7 @@ void destroy_rs_ip_rule(scan_rule_t* p)
{
free(p);
}
scan_rule_t* create_rs_intval_rule(unsigned int sub_type,struct db_intval_rule *intval_rule)
scan_rule_t* create_rs_intval_rule(unsigned int sub_type,struct db_interval_rule *intval_rule)
{
scan_rule_t *p_rule=(scan_rule_t*)calloc(sizeof(scan_rule_t),1);
p_rule->rule_type=RULETYPE_INT;
@@ -1358,14 +1358,14 @@ int add_ip_rule(struct Maat_table_schema* table, struct db_ip_rule_t* db_ip_rule
MESA_lqueue_join_tail(scanner->region_update_q, &op_expr, sizeof(void*));
return 0;
}
int add_intval_rule(struct Maat_table_schema* table,struct db_intval_rule* intval_rule,struct Maat_scanner *scanner,void* logger)
int add_interval_rule(struct Maat_table_schema* table,struct db_interval_rule* intval_rule,struct Maat_scanner *scanner,void* logger)
{
scan_rule_t* p_rule=NULL;
struct op_expr_t* op_expr=NULL;
struct Maat_region_inner* u_para=NULL;
int expr_id=0, ret=0,district_id=-1;
if(table->table_type==TABLE_TYPE_EXPR_PLUS)
if(table->table_type==TABLE_TYPE_INTERVAL_PLUS)
{
assert(strlen(intval_rule->district)>0);
str_unescape(intval_rule->district);
@@ -1945,7 +1945,7 @@ error_out:
void update_intval_rule(struct Maat_table_schema* table, const char* table_line, struct Maat_scanner *scanner, void* logger)
{
struct db_intval_rule* intval_rule=ALLOC(struct db_intval_rule, 1);
struct db_interval_rule* intval_rule=ALLOC(struct db_interval_rule, 1);
struct Maat_table_runtime* table_rt=Maat_table_runtime_get(scanner->table_rt_mgr, table->table_id);
int ret=0;
switch(table->table_type)
@@ -2006,7 +2006,7 @@ void update_intval_rule(struct Maat_table_schema* table, const char* table_line,
}
else
{
ret=add_intval_rule(table, intval_rule,scanner,logger);
ret=add_interval_rule(table, intval_rule,scanner,logger);
if(ret<0)
{
MESA_handle_runtime_log(logger,RLOG_LV_INFO,maat_module ,

View File

@@ -62,7 +62,7 @@ struct db_ip_rule_t
};
int is_valid;
};
struct db_intval_rule
struct db_interval_rule
{
int region_id;
int group_id;
@@ -162,14 +162,15 @@ struct Maat_region_inner
int expr_id_ub; //up boundary
};
#define DISTRICT_ANY -1
#define DISTRICT_UNKNOWN -2
struct _OUTER_scan_status_t
{
struct _Maat_feather_t* feather;
unsigned short thread_num;
unsigned char is_set_district;
unsigned char is_last_region;
int district_id;
int district_id; //-1: Any District; -2: Unkonwn District;
int scan_cnt;
struct Maat_hierarchy_compile_mid* compile_mid;
};

View File

@@ -116,7 +116,7 @@
"regions": [
{
"table_name": "INTERGER_PLUS",
"table_type": "intval_plus",
"table_type": "interval_plus",
"table_content": {
"district": "fqdn_cat_id",
"low_boundary": 1724,
@@ -261,7 +261,7 @@
"regions": [
{
"table_name": "CONTENT_SIZE",
"table_type": "intval",
"table_type": "interval",
"table_content": {
"low_boundary": 100,
"up_boundary": 500
@@ -325,7 +325,7 @@
"regions": [
{
"table_name": "CONTENT_SIZE",
"table_type": "intval",
"table_type": "interval",
"table_content": {
"low_boundary": 2014,
"up_boundary": 2016
@@ -1947,9 +1947,9 @@
"regions": [
{
"table_name": "INTERGER_PLUS",
"table_type": "intval_plus",
"table_type": "interval_plus",
"table_content": {
"district": "intval.plus",
"district": "interval.plus",
"low_boundary": 2020,
"up_boundary": 2020
}

View File

@@ -540,8 +540,8 @@ TEST(StringScan, PrefixAndSuffix)
}
#define IntvalPlusTest 1
TEST(IntvalScan, IntvalPlusPlus)
#define IntervalPlusTest 1
TEST(IntervalScan, IntervalPlus)
{
int table_id=0,ret=0;
int scan_val=2020;
@@ -551,7 +551,7 @@ TEST(IntvalScan, IntvalPlusPlus)
table_id=Maat_table_register(g_feather, "INTERGER_PLUS");
ASSERT_GT(table_id, 0);
ret=Maat_set_scan_status(g_feather, &mid, MAAT_SET_SCAN_DISTRICT, "intval.plus", strlen("intval.plus"));
ret=Maat_set_scan_status(g_feather, &mid, MAAT_SET_SCAN_DISTRICT, "interval.plus", strlen("interval.plus"));
ASSERT_EQ(ret, 0);
ret=Maat_scan_intval(g_feather, table_id, scan_val, result,4, &mid, 0);
@@ -675,7 +675,7 @@ TEST(StringScan, ShouldNotHitExprPlus)
ret=Maat_full_scan_string(g_feather, table_id,CHARSET_GBK, (char*)udp_payload_not_hit, sizeof(udp_payload_not_hit),
result, NULL, 4,
&mid, 0);
EXPECT_EQ(ret, 0);
EXPECT_EQ(ret, -2);
Maat_clean_status(&mid);
return;