Skip to content

Commit e523937

Browse files
flatcapjeriko-one
andcommitted
quote imap strings more carefully
Co-authored-by: JerikoOne <jeriko.one@gmx.us>
1 parent 9bfab35 commit e523937

File tree

5 files changed

+15
-12
lines changed

5 files changed

+15
-12
lines changed

Diff for: imap/auth_login.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ enum ImapAuthRes imap_auth_login(struct ImapData *idata, const char *method)
6565

6666
mutt_message(_("Logging in..."));
6767

68-
imap_quote_string(q_user, sizeof(q_user), idata->conn->account.user);
69-
imap_quote_string(q_pass, sizeof(q_pass), idata->conn->account.pass);
68+
imap_quote_string(q_user, sizeof(q_user), idata->conn->account.user, false);
69+
imap_quote_string(q_pass, sizeof(q_pass), idata->conn->account.pass, false);
7070

7171
/* don't print the password unless we're at the ungodly debugging level
7272
* of 5 or higher */

Diff for: imap/command.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ static void cmd_parse_lsub(struct ImapData *idata, char *s)
499499
mutt_str_strfcpy(buf, "mailboxes \"", sizeof(buf));
500500
mutt_account_tourl(&idata->conn->account, &url);
501501
/* escape \ and " */
502-
imap_quote_string(errstr, sizeof(errstr), list.name);
502+
imap_quote_string(errstr, sizeof(errstr), list.name, true);
503503
url.path = errstr + 1;
504504
url.path[strlen(url.path) - 1] = '\0';
505505
if (mutt_str_strcmp(url.user, ImapUser) == 0)

Diff for: imap/imap.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -464,25 +464,25 @@ static int compile_search(struct Context *ctx, const struct Pattern *pat, struct
464464
return -1;
465465
}
466466
*delim = '\0';
467-
imap_quote_string(term, sizeof(term), pat->p.str);
467+
imap_quote_string(term, sizeof(term), pat->p.str, false);
468468
mutt_buffer_addstr(buf, term);
469469
mutt_buffer_addch(buf, ' ');
470470

471471
/* and field */
472472
*delim = ':';
473473
delim++;
474474
SKIPWS(delim);
475-
imap_quote_string(term, sizeof(term), delim);
475+
imap_quote_string(term, sizeof(term), delim, false);
476476
mutt_buffer_addstr(buf, term);
477477
break;
478478
case MUTT_BODY:
479479
mutt_buffer_addstr(buf, "BODY ");
480-
imap_quote_string(term, sizeof(term), pat->p.str);
480+
imap_quote_string(term, sizeof(term), pat->p.str, false);
481481
mutt_buffer_addstr(buf, term);
482482
break;
483483
case MUTT_WHOLE_MSG:
484484
mutt_buffer_addstr(buf, "TEXT ");
485-
imap_quote_string(term, sizeof(term), pat->p.str);
485+
imap_quote_string(term, sizeof(term), pat->p.str, false);
486486
mutt_buffer_addstr(buf, term);
487487
break;
488488
case MUTT_SERVERSEARCH:
@@ -495,7 +495,7 @@ static int compile_search(struct Context *ctx, const struct Pattern *pat, struct
495495
}
496496
}
497497
mutt_buffer_addstr(buf, "X-GM-RAW ");
498-
imap_quote_string(term, sizeof(term), pat->p.str);
498+
imap_quote_string(term, sizeof(term), pat->p.str, false);
499499
mutt_buffer_addstr(buf, term);
500500
break;
501501
}

Diff for: imap/imap_private.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ char *imap_get_qualifier(char *buf);
328328
int imap_mxcmp(const char *mx1, const char *mx2);
329329
char *imap_next_word(char *s);
330330
void imap_qualify_path(char *dest, size_t len, struct ImapMbox *mx, char *path);
331-
void imap_quote_string(char *dest, size_t dlen, const char *src);
331+
void imap_quote_string(char *dest, size_t dlen, const char *src, bool quote_backtick);
332332
void imap_unquote_string(char *s);
333333
void imap_munge_mbox_name(struct ImapData *idata, char *dest, size_t dlen, const char *src);
334334
void imap_unmunge_mbox_name(struct ImapData *idata, char *s);

Diff for: imap/util.c

+6-3
Original file line numberDiff line numberDiff line change
@@ -798,9 +798,12 @@ void imap_qualify_path(char *dest, size_t len, struct ImapMbox *mx, char *path)
798798
*
799799
* Surround string with quotes, escape " and \ with backslash
800800
*/
801-
void imap_quote_string(char *dest, size_t dlen, const char *src)
801+
void imap_quote_string(char *dest, size_t dlen, const char *src, bool quote_backtick)
802802
{
803-
static const char quote[] = "\"\\";
803+
const char *quote = "`\"\\";
804+
if (!quote_backtick)
805+
quote++;
806+
804807
char *pt = dest;
805808
const char *s = src;
806809

@@ -874,7 +877,7 @@ void imap_munge_mbox_name(struct ImapData *idata, char *dest, size_t dlen, const
874877
char *buf = mutt_str_strdup(src);
875878
imap_utf_encode(idata, &buf);
876879

877-
imap_quote_string(dest, dlen, buf);
880+
imap_quote_string(dest, dlen, buf, false);
878881

879882
FREE(&buf);
880883
}

0 commit comments

Comments
 (0)