增加无摘要配置时的异常处理,增加对累积输入长度和总长度的检查。

This commit is contained in:
zhengchao
2015-11-30 16:45:20 +08:00
parent bda5c6f157
commit 461e50cdb0

View File

@@ -1026,13 +1026,18 @@ stream_para_t Maat_stream_scan_digest_start(Maat_feather_t feather,int table_id,
{
struct _Maat_feather_t* _feather=(_Maat_feather_t*)feather;
struct _Maat_scanner_t* scanner=NULL;
fuzzy_handle_t * tmp_fuzzy_handle=NULL;
struct _Maat_table_info_t *p_table=NULL;
p_table=acqurie_table(_feather, table_id, TABLE_TYPE_DIGEST);
if(p_table==NULL)
{
return NULL;
}
tmp_fuzzy_handle=fuzzy_create_handle(total_len);
if(tmp_fuzzy_handle==NULL)
{
return NULL;
}
struct _stream_para_t* sp=(struct _stream_para_t*)calloc(sizeof(struct _stream_para_t),1);
scanner=_feather->scanner;
sp->feather=_feather;
@@ -1046,7 +1051,7 @@ stream_para_t Maat_stream_scan_digest_start(Maat_feather_t feather,int table_id,
sp->table_id=table_id;
sp->thread_num=thread_num;
sp->total_len=total_len;
sp->fuzzy_hash_handle=fuzzy_create_handle(total_len);
sp->fuzzy_hash_handle=tmp_fuzzy_handle;
return sp;
}
@@ -1060,7 +1065,10 @@ inline int REACH_QUERY_THRESH(unsigned long long total_len,unsigned long long ac
// {
// return 1;
// }
assert(rate<(unsigned long long)(point_size+QUERY_MIN_RATE));
if(rate<(unsigned long long)(point_size+QUERY_MIN_RATE))
{
return 0;
}
if(rate>=QUERY_MIN_RATE&&query_point[rate-QUERY_MIN_RATE]==0)
{
query_point[rate-QUERY_MIN_RATE]=1;
@@ -1080,6 +1088,10 @@ int Maat_stream_scan_digest(stream_para_t * stream_para, const char * data, int
char* digest_buff=NULL;
struct _scan_status_t* _mid=(struct _scan_status_t*)(*mid);
pthread_rwlock_t *GIE_rwlock=&(sp->feather->scanner->digest_rwlock[sp->table_id]);
if(sp->acc_scan_len+(unsigned long long)data_len > sp->total_len)
{
return 0;
}
sp->acc_scan_len+=fuzzy_feed(sp->fuzzy_hash_handle, data, (unsigned int)data_len,offset);
do_query=REACH_QUERY_THRESH(sp->total_len, sp->acc_scan_len, sp->query_point,8);
if(do_query==0)
@@ -1094,8 +1106,11 @@ int Maat_stream_scan_digest(stream_para_t * stream_para, const char * data, int
digest_buff=(char*)malloc(sizeof(char)*digest_len);
fuzzy_digest(sp->fuzzy_hash_handle,digest_buff, digest_len);
if(0==pthread_rwlock_tryrdlock(GIE_rwlock))
{
if(GIE_handle!=NULL)
{
hit_region_cnt=GIE_query(GIE_handle, sp->total_len, digest_buff, query_result, MAX_SCANNER_HIT_NUM);
}
pthread_rwlock_unlock(GIE_rwlock);
}
free(digest_buff);