Skip to content

Commit 477a210

Browse files
committed
imap: pass \Deleted to midb when used in conjunction with long-literal APPEND
Fixes: gromox-0~666
1 parent e81f021 commit 477a210

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

mra/imap/cmd.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2064,16 +2064,16 @@ int icp_append(int argc, char **argv, imap_context &ctx) try
20642064
return 1918;
20652065
}
20662066

2067-
static inline bool is_flag_name(const char *flag)
2067+
static inline bool append_allowed_flag_name(const char *flag)
20682068
{
2069-
static constexpr const char *names[] = {"\\Answered", "\\Flagged", "\\Seen", "\\Draft"};
2069+
static constexpr const char *names[] = {"\\Answered", "\\Flagged", "\\Seen", "\\Draft", "\\Deleted"};
20702070
for (auto s : names)
20712071
if (strcasecmp(flag, s) == 0)
20722072
return true;
20732073
return false;
20742074
}
20752075

2076-
static int icp_append_begin2(int argc, char **argv, imap_context &ctx) try
2076+
static int icp_long_append_begin2(int argc, char **argv, imap_context &ctx) try
20772077
{
20782078
if (!ctx.is_authed())
20792079
return 1804 | DISPATCH_BREAK;
@@ -2105,7 +2105,7 @@ static int icp_append_begin2(int argc, char **argv, imap_context &ctx) try
21052105
if (temp_argc == -1)
21062106
return 1800 | DISPATCH_BREAK;
21072107
for (int i = 0; i < temp_argc; ++i)
2108-
if (!is_flag_name(temp_argv[i]))
2108+
if (!append_allowed_flag_name(temp_argv[i]))
21092109
return 1800 | DISPATCH_BREAK;
21102110
}
21112111
auto pcontext = &ctx;
@@ -2130,12 +2130,12 @@ static int icp_append_begin2(int argc, char **argv, imap_context &ctx) try
21302130
return 1918 | DISPATCH_BREAK;
21312131
}
21322132

2133-
int icp_append_begin(int argc, char **argv, imap_context &ctx)
2133+
int icp_long_append_begin(int argc, char **argv, imap_context &ctx)
21342134
{
2135-
return icp_dval(argc, argv, ctx, icp_append_begin2(argc, argv, ctx));
2135+
return icp_dval(argc, argv, ctx, icp_long_append_begin2(argc, argv, ctx));
21362136
}
21372137

2138-
static int icp_append_end2(int argc, char **argv, imap_context &ctx) try
2138+
static int icp_long_append_end2(int argc, char **argv, imap_context &ctx) try
21392139
{
21402140
auto pcontext = &ctx;
21412141
std::string content;
@@ -2199,9 +2199,9 @@ static int icp_append_end2(int argc, char **argv, imap_context &ctx) try
21992199
return 1918;
22002200
}
22012201

2202-
int icp_append_end(int argc, char **argv, imap_context &ctx)
2202+
int icp_long_append_end(int argc, char **argv, imap_context &ctx)
22032203
{
2204-
return icp_dval(argc, argv, ctx, icp_append_end2(argc, argv, ctx));
2204+
return icp_dval(argc, argv, ctx, icp_long_append_end2(argc, argv, ctx));
22052205
}
22062206

22072207
int icp_check(int argc, char **argv, imap_context &ctx)

mra/imap/imap.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ extern int icp_xlist(int argc, char **argv, imap_context &);
172172
extern int icp_lsub(int argc, char **argv, imap_context &);
173173
extern int icp_status(int argc, char **argv, imap_context &);
174174
extern int icp_append(int argc, char **argv, imap_context &);
175-
extern int icp_append_begin(int argc, char **argv, imap_context &);
176-
extern int icp_append_end(int argc, char **argv, imap_context &);
175+
extern int icp_long_append_begin(int argc, char **argv, imap_context &);
176+
extern int icp_long_append_end(int argc, char **argv, imap_context &);
177177
extern int icp_check(int argc, char **argv, imap_context &);
178178
extern int icp_close(int argc, char **argv, imap_context &);
179179
extern int icp_expunge(int argc, char **argv, imap_context &);

mra/imap/parser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ static tproc_status ps_literal_processing(imap_context &ctx)
506506
argv, std::size(argv));
507507
if (argc >= 3 && 0 == strcasecmp(argv[1], "APPEND")) {
508508
/* Special handling for APPEND with potentially huge literals */
509-
switch (icp_append_begin(argc, argv, ctx)) {
509+
switch (icp_long_append_begin(argc, argv, ctx)) {
510510
case DISPATCH_CONTINUE: {
511511
ctx.current_len = &ctx.read_buffer[ctx.read_offset] - &ctx.literal_ptr[nl_len];
512512
if (pcontext->current_len < 0) {
@@ -629,7 +629,7 @@ static tproc_status ps_cmd_processing(imap_context &ctx)
629629
pcontext->connection.write(" ", 1);
630630
pcontext->connection.write(imap_reply_str, string_length);
631631
} else {
632-
icp_append_end(argc, argv, ctx);
632+
icp_long_append_end(argc, argv, ctx);
633633
}
634634
pcontext->sched_stat = isched_stat::rdcmd;
635635
pcontext->literal_ptr = nullptr;

0 commit comments

Comments
 (0)