Preparation to extract modifiers from comment (#166)

pull/391/head
René Cannaò 11 years ago
parent e024bbed83
commit c98a88f29b

@ -5,6 +5,11 @@
#ifndef C_TOKENIZER_H
#define C_TOKENIZER_H
#ifndef FIRST_COMMENT_MAX_LENGTH
#define FIRST_COMMENT_MAX_LENGTH 1024
#endif /* FIRST_COMMENT_MAX_LENGTH */
typedef struct
{
char* s;
@ -23,8 +28,7 @@ extern "C" {
tokenizer_t tokenizer( const char* s, const char* delimiters, int empties );
const char* free_tokenizer( tokenizer_t* tokenizer );
const char* tokenize( tokenizer_t* tokenizer );
char * mysql_query_digest(char *s, int len);
char * mysql_query_digest_and_first_comment(char *s , int len , char *first_comment);
void c_split_2(const char *in, const char *del, char **out1, char **out2);
#ifdef __cplusplus
}

@ -69,6 +69,7 @@ struct __SQP_query_parser_t {
sfilter sf;
uint64_t digest;
char *digest_text;
char *first_comment;
uint64_t digest_total;
};
@ -794,9 +795,14 @@ void * Query_Processor::query_parser_init(char *query, int query_length, int fla
if (mysql_thread___commands_stats)
libinjection_sqli_init(&qp->sf, query, query_length, FLAG_SQL_MYSQL);
qp->digest_text=NULL;
qp->first_comment=NULL;
qp->first_comment=(char *)l_alloc(FIRST_COMMENT_MAX_LENGTH);
if (mysql_thread___query_digests) {
qp->digest_text=mysql_query_digest(query, query_length);
qp->digest_text=mysql_query_digest_and_first_comment(query, query_length, qp->first_comment);
qp->digest=SpookyHash::Hash64(qp->digest_text,strlen(qp->digest_text),0);
if (strlen(qp->first_comment)) {
fprintf(stderr,"Comment= %s \n", qp->first_comment);
}
}
return (void *)qp;
};
@ -974,5 +980,8 @@ void Query_Processor::query_parser_free(void *args) {
free(qp->digest_text);
qp->digest_text=NULL;
}
free(qp);
if (qp->first_comment) {
l_free(FIRST_COMMENT_MAX_LENGTH,qp->first_comment);
}
free(qp);
};

@ -178,7 +178,7 @@ static char is_digit_string(char *f, char *t)
}
char *mysql_query_digest(char *s, int len){
char *mysql_query_digest_and_first_comment(char *s, int len, char *first_comment){
int i = 0;
char *r = (char *) malloc(len + SIZECHAR);
@ -190,6 +190,8 @@ char *mysql_query_digest(char *s, int len){
char qutr_char = 0;
char flag = 0;
char fc=0;
int fc_len=0;
while(i < len)
{
@ -250,6 +252,22 @@ char *mysql_query_digest(char *s, int len){
// --------
// comment
// --------
if (flag == 1) {
if (fc==0) {
fc=1;
}
if (fc==1) {
if (fc_len<FIRST_COMMENT_MAX_LENGTH-1) {
first_comment[fc_len]= !is_space_char(*s) ? *s : ' ';
fc_len++;
}
if (prev_char == '*' && *s == '/') {
if (fc_len>=2) fc_len-=2;
first_comment[fc_len]=0;
fc=2;
}
}
}
if(
// comment type 1 - /* .. */
(flag == 1 && prev_char == '*' && *s == '/') ||

Loading…
Cancel
Save