PVS Studio refactoring

Signed-off-by: Janos SUTO <sj@acts.hu>
This commit is contained in:
Janos SUTO 2021-04-18 20:19:26 +02:00
parent 5d479b732a
commit be39146fd2
13 changed files with 70 additions and 90 deletions

View File

@ -244,7 +244,7 @@ int retrieve_file_from_archive(char *filename, int mode, char **buffer, FILE *de
CLEANUP: CLEANUP:
if(fd != -1) close(fd); if(fd != -1) close(fd); //-V547
if(s) free(s); if(s) free(s);
if(cfg->encrypt_messages == 1) if(cfg->encrypt_messages == 1)
#if OPENSSL_VERSION_NUMBER < 0x10100000L #if OPENSSL_VERSION_NUMBER < 0x10100000L

View File

@ -81,8 +81,8 @@ int make_digests(struct session_data *sdata, struct config *cfg){
SHA256_Final(md2, &context2); SHA256_Final(md2, &context2);
for(i=0;i<DIGEST_LENGTH;i++){ for(i=0;i<DIGEST_LENGTH;i++){
snprintf(sdata->bodydigest + i*2, 2*DIGEST_LENGTH, "%02x", md[i]); snprintf(sdata->bodydigest + i*2, 3, "%02x", md[i]);
snprintf(sdata->digest + i*2, 2*DIGEST_LENGTH, "%02x", md2[i]); snprintf(sdata->digest + i*2, 3, "%02x", md2[i]);
} }
return 0; return 0;

View File

@ -416,7 +416,7 @@ int list_folders(struct data *data){
} }
// trim the "A3 OK LIST completed" trailer off // trim the "A3 OK LIST completed" trailer off
if(p) *p = '\0'; if(p) *p = '\0'; //-V547
memset(attrs, 0, sizeof(attrs)); memset(attrs, 0, sizeof(attrs));
@ -449,21 +449,27 @@ int list_folders(struct data *data){
} else { } else {
if(fldrlen) { if(fldrlen) {
ruf = malloc(strlen(q) * 2 + 1); int ruflen = strlen(q) * 2;
memset(ruf, 0, strlen(q) * 2 + 1); ruf = malloc(ruflen + 1);
memcpy(ruf, q, strlen(q)); if(ruf){
r = ruf; snprintf(ruf, ruflen, "%s", q);
while(*r != '\0') { r = ruf;
if(*r == '\\') { while(*r != '\0') {
memmove(r + 1, r, strlen(r)); if(*r == '\\') {
memmove(r + 1, r, strlen(r));
r++;
}
r++; r++;
} }
r++;
snprintf(folder, sizeof(folder)-1, "%s", ruf);
free(ruf);
}
else {
printf("error: ruf = malloc()\n");
} }
snprintf(folder, sizeof(folder)-1, "%s", ruf);
free(ruf);
fldrlen = 0; fldrlen = 0;
} else { } else {
snprintf(folder, sizeof(folder)-1, "%s", q); snprintf(folder, sizeof(folder)-1, "%s", q);

View File

@ -230,11 +230,8 @@ int extractEmail(char *rawmail, char *email){
*/ */
void make_random_string(unsigned char *buf, int buflen){ void make_random_string(unsigned char *buf, int buflen){
int i, len, fd; const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int urandom=0; int i, fd, urandom=0, len = sizeof(alphanum)-1;
static char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
len = strlen(alphanum);
fd = open(RANDOM_POOL, O_RDONLY); fd = open(RANDOM_POOL, O_RDONLY);
if(fd != -1){ if(fd != -1){
@ -289,7 +286,7 @@ int get_random_bytes(unsigned char *buf, int len, unsigned char server_id){
taia_now(&now); taia_now(&now);
taia_pack(nowpack, &now); taia_pack(nowpack, &now);
memcpy(buf, nowpack, 12); memcpy(buf, nowpack, 12); //-V512
fd = open(RANDOM_POOL, O_RDONLY); fd = open(RANDOM_POOL, O_RDONLY);
if(fd == -1) return ret; if(fd == -1) return ret;

View File

@ -45,7 +45,7 @@ struct parser_state parse_message(struct session_data *sdata, int take_into_piec
if(take_into_pieces == 1 && state.writebufpos > 0){ if(take_into_pieces == 1 && state.writebufpos > 0){
if(write(state.mfd, writebuffer, state.writebufpos) == -1) syslog(LOG_PRIORITY, "ERROR: %s: write(), %s, %d, %s", sdata->ttmpfile, __func__, __LINE__, __FILE__); if(write(state.mfd, writebuffer, state.writebufpos) == -1) syslog(LOG_PRIORITY, "ERROR: %s: write(), %s, %d, %s", sdata->ttmpfile, __func__, __LINE__, __FILE__);
memset(writebuffer, 0, sizeof(writebuffer)); memset(writebuffer, 0, sizeof(writebuffer)); //-V597
state.writebufpos = 0; state.writebufpos = 0;
} }
@ -212,7 +212,7 @@ int parse_line(char *buf, struct parser_state *state, struct session_data *sdata
sdata->restored_copy = 1; sdata->restored_copy = 1;
} }
if(cfg->security_header && state->found_security_header == 0 && strstr(buf, cfg->security_header)){ if(cfg->security_header[0] && state->found_security_header == 0 && strstr(buf, cfg->security_header)){
state->found_security_header = 1; state->found_security_header = 1;
} }

View File

@ -20,7 +20,7 @@ void fixupEncodedHeaderLine(char *buf, int buflen);
void fixupSoftBreakInQuotedPritableLine(char *buf, struct parser_state *state); void fixupSoftBreakInQuotedPritableLine(char *buf, struct parser_state *state);
void fixupBase64EncodedLine(char *buf, struct parser_state *state); void fixupBase64EncodedLine(char *buf, struct parser_state *state);
void markHTML(char *buf, struct parser_state *state); void markHTML(char *buf, struct parser_state *state);
int appendHTMLTag(char *buf, char *htmlbuf, int pos, struct parser_state *state); void setStateHTMLStyle(char *htmlbuf, int pos, struct parser_state *state);
void translateLine(unsigned char *p, struct parser_state *state); void translateLine(unsigned char *p, struct parser_state *state);
void fix_email_address_for_sphinx(char *s); void fix_email_address_for_sphinx(char *s);
void split_email_address(char *s); void split_email_address(char *s);

View File

@ -538,7 +538,7 @@ void markHTML(char *buf, struct parser_state *state){
if(isspace(*s)){ if(isspace(*s)){
if(j > 0){ if(j > 0){
k += appendHTMLTag(puf, html, pos, state); setStateHTMLStyle(html, pos, state);
memset(html, 0, SMALLBUFSIZE); j=0; memset(html, 0, SMALLBUFSIZE); j=0;
} }
pos++; pos++;
@ -563,7 +563,7 @@ void markHTML(char *buf, struct parser_state *state){
if(j > 0){ if(j > 0){
strncat(html, " ", SMALLBUFSIZE-1); strncat(html, " ", SMALLBUFSIZE-1);
k += appendHTMLTag(puf, html, pos, state); setStateHTMLStyle(html, pos, state);
memset(html, 0, SMALLBUFSIZE); j=0; memset(html, 0, SMALLBUFSIZE); j=0;
} }
} }
@ -571,47 +571,15 @@ void markHTML(char *buf, struct parser_state *state){
} }
//printf("append last in line:*%s*, html=+%s+, j=%d\n", puf, html, j); //printf("append last in line:*%s*, html=+%s+, j=%d\n", puf, html, j);
if(j > 0){ appendHTMLTag(puf, html, pos, state); } if(j > 0){ setStateHTMLStyle(html, pos, state); }
strcpy(buf, puf); strcpy(buf, puf);
} }
int appendHTMLTag(char *buf, char *htmlbuf, int pos, struct parser_state *state){ void setStateHTMLStyle(char *htmlbuf, int pos, struct parser_state *state){
char html[SMALLBUFSIZE];
int len;
if(pos == 0 && strncmp(htmlbuf, "style ", 6) == 0) state->style = 1; if(pos == 0 && strncmp(htmlbuf, "style ", 6) == 0) state->style = 1;
if(pos == 0 && strncmp(htmlbuf, "/style ", 7) == 0) state->style = 0; if(pos == 0 && strncmp(htmlbuf, "/style ", 7) == 0) state->style = 0;
return 0;
//printf("appendHTML: pos:%d, +%s+\n", pos, htmlbuf);
if(state->style == 1) return 0;
if(strlen(htmlbuf) == 0) return 0;
snprintf(html, SMALLBUFSIZE-1, "HTML*%s", htmlbuf);
len = strlen(html);
if(len > 8 && strchr(html, '=')){
char *p = strstr(html, "cid:");
if(p){
*(p+3) = '\0';
strncat(html, " ", SMALLBUFSIZE-1);
}
strncat(buf, html, MAXBUFSIZE-1);
return len;
}
if(strstr(html, "http") ){
strncat(buf, html+5, MAXBUFSIZE-1);
return len-5;
}
return 0;
} }

View File

@ -103,7 +103,7 @@ void child_sighup_handler(int sig){
int perform_checks(char *filename, struct session_data *sdata, struct data *data, struct parser_state *parser_state, struct config *cfg){ int perform_checks(char *filename, struct session_data *sdata, struct data *data, struct parser_state *parser_state, struct config *cfg){
if(cfg->security_header && parser_state->found_security_header == 0){ if(cfg->security_header[0] && parser_state->found_security_header == 0){
syslog(LOG_PRIORITY, "%s: discarding: missing security header", filename); syslog(LOG_PRIORITY, "%s: discarding: missing security header", filename);
return ERR_DISCARDED; return ERR_DISCARDED;
} }

View File

@ -25,7 +25,6 @@ extern int optind;
int dryrun = 0; int dryrun = 0;
int exportall = 0; int exportall = 0;
int verification_status = 0; int verification_status = 0;
int rc = 0;
int export_to_stdout = 0; int export_to_stdout = 0;
char *query=NULL; char *query=NULL;
int verbosity = 0; int verbosity = 0;
@ -33,7 +32,7 @@ int max_matches = 1000;
char *index_list = "main1,dailydelta1,delta1"; char *index_list = "main1,dailydelta1,delta1";
regex_t regexp; regex_t regexp;
char *zipfile = NULL; char *zipfile = NULL;
struct zip *z = NULL; struct zip *zip = NULL;
uint64 *zip_ids = NULL; uint64 *zip_ids = NULL;
int zip_counter = 0; int zip_counter = 0;
int zip_batch = 2000; int zip_batch = 2000;
@ -165,6 +164,7 @@ uint64 run_query(struct session_data *sdata, struct session_data *sdata2, char *
MYSQL_ROW row; MYSQL_ROW row;
uint64 id=0; uint64 id=0;
char s[SMALLBUFSIZE]; char s[SMALLBUFSIZE];
int rc=0;
*num = 0; *num = 0;
@ -194,6 +194,7 @@ uint64 run_query(struct session_data *sdata, struct session_data *sdata2, char *
} }
if(!rc) export_emails_matching_to_query(sdata, query, cfg); if(!rc) export_emails_matching_to_query(sdata, query, cfg);
else printf("error: append_string_to_buffer() in run_query()\n");
free(query); free(query);
query = NULL; query = NULL;
@ -240,6 +241,7 @@ void export_emails_matching_id_list(struct session_data *sdata, struct session_d
int build_query_from_args(char *from, char *to, char *fromdomain, char *todomain, int minsize, int maxsize, unsigned long startdate, unsigned long stopdate){ int build_query_from_args(char *from, char *to, char *fromdomain, char *todomain, int minsize, int maxsize, unsigned long startdate, unsigned long stopdate){
char s[SMALLBUFSIZE]; char s[SMALLBUFSIZE];
int rc=0;
if(exportall == 1){ if(exportall == 1){
rc = append_string_to_buffer(&query, "SELECT `id`, `piler_id`, `digest`, `bodydigest` FROM "); rc = append_string_to_buffer(&query, "SELECT `id`, `piler_id`, `digest`, `bodydigest` FROM ");
@ -328,9 +330,9 @@ int build_query_from_args(char *from, char *to, char *fromdomain, char *todomain
#if LIBZIP_VERSION_MAJOR >= 1 #if LIBZIP_VERSION_MAJOR >= 1
void zip_flush(){ void zip_flush(){
zip_close(z); zip_close(zip);
z = NULL; zip = NULL;
zip_counter = 0; zip_counter = 0;
if(!zip_ids) return; if(!zip_ids) return;
@ -354,7 +356,7 @@ int export_emails_matching_to_query(struct session_data *sdata, char *s, struct
char digest[SMALLBUFSIZE], bodydigest[SMALLBUFSIZE]; char digest[SMALLBUFSIZE], bodydigest[SMALLBUFSIZE];
char filename[SMALLBUFSIZE]; char filename[SMALLBUFSIZE];
struct sql sql; struct sql sql;
int errorp; int errorp, rc=0;
if(prepare_sql_statement(sdata, &sql, s) == ERR) return ERR; if(prepare_sql_statement(sdata, &sql, s) == ERR) return ERR;
@ -410,9 +412,9 @@ int export_emails_matching_to_query(struct session_data *sdata, char *s, struct
if(zipfile){ if(zipfile){
#if LIBZIP_VERSION_MAJOR >= 1 #if LIBZIP_VERSION_MAJOR >= 1
// Open zip file if handler is NULL // Open zip file if handler is NULL
if(!z){ if(!zip){
z = zip_open(zipfile, ZIP_CREATE, &errorp); zip = zip_open(zipfile, ZIP_CREATE, &errorp);
if(!z){ if(!zip){
printf("error: error creating zip file=%s, error code=%d\n", zipfile, errorp); printf("error: error creating zip file=%s, error code=%d\n", zipfile, errorp);
return ERR; return ERR;
} }
@ -425,12 +427,12 @@ int export_emails_matching_to_query(struct session_data *sdata, char *s, struct
return ERR; return ERR;
} }
zip_source_t *zs = zip_source_file(z, filename, 0, 0); zip_source_t *zs = zip_source_file(zip, filename, 0, 0);
if(zs && zip_file_add(z, filename, zs, ZIP_FL_ENC_UTF_8) >= 0){ if(zs && zip_file_add(zip, filename, zs, ZIP_FL_ENC_UTF_8) >= 0){
*(zip_ids+zip_counter) = id; *(zip_ids+zip_counter) = id;
zip_counter++; zip_counter++;
} else { } else {
printf("error adding file %s: %s\n", filename, zip_strerror(z)); printf("error adding file %s: %s\n", filename, zip_strerror(zip));
return ERR; return ERR;
} }
@ -539,7 +541,10 @@ int main(int argc, char **argv){
break; break;
} }
rc = append_email_to_buffer(&from, optarg); if(append_email_to_buffer(&from, optarg)){
printf("error: append_email_to_buffer() for from\n");
return 1;
}
break; break;
@ -550,7 +555,10 @@ int main(int argc, char **argv){
break; break;
} }
rc = append_email_to_buffer(&to, optarg); if(append_email_to_buffer(&to, optarg)){
printf("error: append_email_to_buffer() for to\n");
return 1;
}
break; break;
@ -561,7 +569,10 @@ int main(int argc, char **argv){
break; break;
} }
rc = append_email_to_buffer(&fromdomain, optarg); if(append_email_to_buffer(&fromdomain, optarg)){
printf("error: append_email_to_buffer() for fromdomain\n");
return 1;
}
break; break;
@ -572,7 +583,10 @@ int main(int argc, char **argv){
break; break;
} }
rc = append_email_to_buffer(&todomain, optarg); if(append_email_to_buffer(&todomain, optarg)){
printf("error: append_email_to_buffer() for todomain\n");
return 1;
}
break; break;

View File

@ -295,7 +295,7 @@ int main(int argc, char **argv){
} }
if(!mbox[0] && !data.import->mboxdir && !data.import->filename && !directory && !imapserver && !pop3server) usage(); if(!mbox[0] && !data.import->mboxdir && !data.import->filename[0] && !directory && !imapserver && !pop3server) usage();
if(data.import->failed_folder && !can_i_write_directory(data.import->failed_folder)){ if(data.import->failed_folder && !can_i_write_directory(data.import->failed_folder)){
printf("cannot write failed directory '%s'\n", data.import->failed_folder); printf("cannot write failed directory '%s'\n", data.import->failed_folder);

View File

@ -118,7 +118,6 @@ int append_rule(struct node *xhash[], struct rule_cond *rule_cond){
struct rule *create_rule_item(struct rule_cond *rule_cond){ struct rule *create_rule_item(struct rule_cond *rule_cond){
struct rule *h=NULL; struct rule *h=NULL;
char empty = '\0';
int len; int len;
if(rule_cond == NULL) return NULL; if(rule_cond == NULL) return NULL;
@ -144,16 +143,16 @@ struct rule *create_rule_item(struct rule_cond *rule_cond){
h->emptyfrom = h->emptyto = h->emptysubject = h->emptyaname = h->emptyatype = 0; h->emptyfrom = h->emptyto = h->emptysubject = h->emptyaname = h->emptyatype = 0;
if(rule_cond->from == NULL || strlen(rule_cond->from) < 1){ rule_cond->from[0] = empty; h->emptyfrom = 1; } if(rule_cond->from[0] == 0){ h->emptyfrom = 1; }
if(regcomp(&(h->from), rule_cond->from, REG_ICASE | REG_EXTENDED)) h->compiled = 0; if(regcomp(&(h->from), rule_cond->from, REG_ICASE | REG_EXTENDED)) h->compiled = 0;
if(rule_cond->to == NULL || strlen(rule_cond->to) < 1){ rule_cond->to[0] = empty; h->emptyto = 1; } if(rule_cond->to[0] == 0){ h->emptyto = 1; }
if(regcomp(&(h->to), rule_cond->to, REG_ICASE | REG_EXTENDED)) h->compiled = 0; if(regcomp(&(h->to), rule_cond->to, REG_ICASE | REG_EXTENDED)) h->compiled = 0;
if(rule_cond->subject == NULL || strlen(rule_cond->subject) < 1){ rule_cond->subject[0] = empty; h->emptysubject = 1; } if(rule_cond->subject[0] == 0){ h->emptysubject = 1; }
if(regcomp(&(h->subject), rule_cond->subject, REG_ICASE | REG_EXTENDED)) h->compiled = 0; if(regcomp(&(h->subject), rule_cond->subject, REG_ICASE | REG_EXTENDED)) h->compiled = 0;
if(rule_cond->body == NULL || strlen(rule_cond->body) < 1){ rule_cond->body[0] = empty; h->emptybody = 1; } if(rule_cond->body[0] == 0){ h->emptybody = 1; }
if(regcomp(&(h->body), rule_cond->body, REG_ICASE | REG_EXTENDED)) h->compiled = 0; if(regcomp(&(h->body), rule_cond->body, REG_ICASE | REG_EXTENDED)) h->compiled = 0;
h->spam = rule_cond->spam; h->spam = rule_cond->spam;
@ -161,20 +160,16 @@ struct rule *create_rule_item(struct rule_cond *rule_cond){
h->folder_id = rule_cond->folder_id; h->folder_id = rule_cond->folder_id;
h->size = rule_cond->size; h->size = rule_cond->size;
if(rule_cond->_size == NULL) rule_cond->_size[0] = empty;
snprintf(h->_size, 3, "%s", rule_cond->_size); snprintf(h->_size, 3, "%s", rule_cond->_size);
if(rule_cond->attachment_name == NULL || strlen(rule_cond->attachment_name) < 1){ rule_cond->attachment_name[0] = empty; h->emptyaname = 1; } if(rule_cond->attachment_name[0] == 0){ h->emptyaname = 1; }
if(regcomp(&(h->attachment_name), rule_cond->attachment_name, REG_ICASE | REG_EXTENDED)) h->compiled = 0; if(regcomp(&(h->attachment_name), rule_cond->attachment_name, REG_ICASE | REG_EXTENDED)) h->compiled = 0;
if(rule_cond->attachment_type == NULL || strlen(rule_cond->attachment_type) < 1){ rule_cond->attachment_type[0] = empty; h->emptyatype = 1; } if(rule_cond->attachment_type[0] == 0){ h->emptyatype = 1; }
if(regcomp(&(h->attachment_type), rule_cond->attachment_type, REG_ICASE | REG_EXTENDED)) h->compiled = 0; if(regcomp(&(h->attachment_type), rule_cond->attachment_type, REG_ICASE | REG_EXTENDED)) h->compiled = 0;
h->attachment_size = rule_cond->attachment_size; h->attachment_size = rule_cond->attachment_size;
if(rule_cond->_attachment_size == NULL) rule_cond->_attachment_size[0] = empty;
snprintf(h->_attachment_size, 3, "%s", rule_cond->_attachment_size); snprintf(h->_attachment_size, 3, "%s", rule_cond->_attachment_size);
len = strlen(rule_cond->domain)+8 + strlen(rule_cond->from)+6 + strlen(rule_cond->to)+4 + strlen(rule_cond->subject)+9 + strlen(rule_cond->body)+6 + strlen(rule_cond->_size)+6 + strlen(rule_cond->attachment_name)+10 + strlen(rule_cond->attachment_type)+10 + strlen(rule_cond->_attachment_size)+10 + 9 + 15 + 15; len = strlen(rule_cond->domain)+8 + strlen(rule_cond->from)+6 + strlen(rule_cond->to)+4 + strlen(rule_cond->subject)+9 + strlen(rule_cond->body)+6 + strlen(rule_cond->_size)+6 + strlen(rule_cond->attachment_name)+10 + strlen(rule_cond->attachment_type)+10 + strlen(rule_cond->_attachment_size)+10 + 9 + 15 + 15;

View File

@ -314,7 +314,7 @@ void process_command_period(struct smtp_session *session){
session->buflen = 0; session->buflen = 0;
session->last_data_char = 0; session->last_data_char = 0;
memset(session->buf, 0, SMALLBUFSIZE); memset(session->buf, 0, sizeof(session->buf));
send_smtp_response(session, buf); send_smtp_response(session, buf);
} }

View File

@ -228,7 +228,7 @@ int store_file(struct session_data *sdata, char *filename, int len, struct confi
ENDE: ENDE:
if(outbuf) free(outbuf); if(outbuf) free(outbuf);
if(z) free(z); if(z) free(z); //-V547
return ret; return ret;
} }