mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-11-15 17:47:09 +00:00
Fix segfault in mail folder (SF: 3007493)
This commit is contained in:
parent
da1926344d
commit
b03541a91c
41
src/mail.c
41
src/mail.c
@ -61,6 +61,8 @@
|
|||||||
#define POP3_TYPE 1
|
#define POP3_TYPE 1
|
||||||
#define IMAP_TYPE 2
|
#define IMAP_TYPE 2
|
||||||
|
|
||||||
|
#define MAXSIZE 1024
|
||||||
|
|
||||||
struct mail_s { // for imap and pop3
|
struct mail_s { // for imap and pop3
|
||||||
unsigned long unseen;
|
unsigned long unseen;
|
||||||
unsigned long messages;
|
unsigned long messages;
|
||||||
@ -70,11 +72,11 @@ struct mail_s { // for imap and pop3
|
|||||||
unsigned int retries;
|
unsigned int retries;
|
||||||
float interval;
|
float interval;
|
||||||
double last_update;
|
double last_update;
|
||||||
char host[128];
|
char host[MAXSIZE];
|
||||||
char user[128];
|
char user[MAXSIZE];
|
||||||
char pass[128];
|
char pass[MAXSIZE];
|
||||||
char command[1024];
|
char command[MAXSIZE];
|
||||||
char folder[128];
|
char folder[MAXSIZE];
|
||||||
timed_thread *p_timed_thread;
|
timed_thread *p_timed_thread;
|
||||||
char secure;
|
char secure;
|
||||||
};
|
};
|
||||||
@ -413,7 +415,8 @@ struct mail_s *parse_mail_args(char type, const char *arg)
|
|||||||
mail = malloc(sizeof(struct mail_s));
|
mail = malloc(sizeof(struct mail_s));
|
||||||
memset(mail, 0, sizeof(struct mail_s));
|
memset(mail, 0, sizeof(struct mail_s));
|
||||||
|
|
||||||
if (sscanf(arg, "%128s %128s %128s", mail->host, mail->user, mail->pass)
|
#define lenstr "%1023s"
|
||||||
|
if (sscanf(arg, lenstr " " lenstr " " lenstr, mail->host, mail->user, mail->pass)
|
||||||
!= 3) {
|
!= 3) {
|
||||||
if (type == POP3_TYPE) {
|
if (type == POP3_TYPE) {
|
||||||
NORM_ERR("Scanning POP3 args failed");
|
NORM_ERR("Scanning POP3 args failed");
|
||||||
@ -431,7 +434,8 @@ struct mail_s *parse_mail_args(char type, const char *arg)
|
|||||||
term.c_lflag &= ~ECHO;
|
term.c_lflag &= ~ECHO;
|
||||||
tcsetattr(fp, TCSANOW, &term);
|
tcsetattr(fp, TCSANOW, &term);
|
||||||
printf("Enter mailbox password (%s@%s): ", mail->user, mail->host);
|
printf("Enter mailbox password (%s@%s): ", mail->user, mail->host);
|
||||||
scanf("%128s", mail->pass);
|
scanf(lenstr, mail->pass);
|
||||||
|
#undef lenstr
|
||||||
printf("\n");
|
printf("\n");
|
||||||
term.c_lflag |= ECHO;
|
term.c_lflag |= ECHO;
|
||||||
tcsetattr(fp, TCSANOW, &term);
|
tcsetattr(fp, TCSANOW, &term);
|
||||||
@ -465,34 +469,35 @@ struct mail_s *parse_mail_args(char type, const char *arg)
|
|||||||
if (type == IMAP_TYPE) {
|
if (type == IMAP_TYPE) {
|
||||||
tmp = strstr(arg, "-f ");
|
tmp = strstr(arg, "-f ");
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
int len = 1024;
|
int len = MAXSIZE - 1;
|
||||||
tmp += 3;
|
tmp += 3;
|
||||||
if (tmp[0] == '\'') {
|
if (tmp[0] == '\'') {
|
||||||
len = strstr(tmp + 1, "'") - tmp - 1;
|
len = strstr(tmp + 1, "'") - tmp;
|
||||||
if (len > 1024) {
|
if (len > MAXSIZE) {
|
||||||
len = 1024;
|
len = MAXSIZE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strncpy(mail->folder, tmp + 1, len);
|
strncpy(mail->folder, tmp + 1, len - 1);
|
||||||
} else {
|
} else {
|
||||||
strncpy(mail->folder, "INBOX", 128); // default imap inbox
|
strncpy(mail->folder, "INBOX", MAXSIZE - 1); // default imap inbox
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tmp = strstr(arg, "-e ");
|
tmp = strstr(arg, "-e ");
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
int len = 1024;
|
int len = MAXSIZE - 1;
|
||||||
tmp += 3;
|
tmp += 3;
|
||||||
|
|
||||||
if (tmp[0] == '\'') {
|
if (tmp[0] == '\'') {
|
||||||
len = strstr(tmp + 1, "'") - tmp - 1;
|
len = strstr(tmp + 1, "'") - tmp;
|
||||||
if (len > 1024) {
|
if (len > MAXSIZE) {
|
||||||
len = 1024;
|
len = MAXSIZE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strncpy(mail->command, tmp + 1, len);
|
strncpy(mail->command, tmp + 1, len - 1);
|
||||||
} else {
|
} else {
|
||||||
mail->command[0] = '\0';
|
mail->command[0] = '\0';
|
||||||
}
|
}
|
||||||
|
printf("'%s' '%s'\n", mail->folder, mail->command);
|
||||||
mail->p_timed_thread = NULL;
|
mail->p_timed_thread = NULL;
|
||||||
return mail;
|
return mail;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user