Skip to content

Commit 6b8c28d

Browse files
committed
midb: do not let M-MAKF command decode the incoming name twice
Fixes: gromox-2.37-66-gfd5fe4d2d References: GXH-115
1 parent 94595ce commit 6b8c28d

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

exch/midb/mail_engine.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2469,13 +2469,14 @@ static int mail_engine_mrenf(int argc, char **argv, int sockd)
24692469
if (mail_engine_get_folder_id(pidb.get(), argv[3]) != 0)
24702470
return MIDB_E_FOLDER_EXISTS;
24712471

2472+
/* cf. mmakf for example */
24722473
const char *ptoken = decoded_name.c_str(), *ptoken1;
24732474
uint64_t folder_id1 = PRIVATE_FID_IPMSUBTREE;
24742475
while ((ptoken1 = strchr(ptoken, '/')) != NULL) {
2475-
std::string temp_name(ptoken, ptoken1 - ptoken);
24762476
auto parent_name = std::string_view(decoded_name.c_str(), ptoken1 - decoded_name.c_str());
24772477
auto folder_id2 = me_get_folder_id_raw(pidb.get(), parent_name);
24782478
if (0 == folder_id2) {
2479+
std::string temp_name(ptoken, ptoken1 - ptoken);
24792480
if (!common_util_create_folder(argv[1],
24802481
user_id, rop_util_make_eid_ex(1, folder_id1),
24812482
temp_name.c_str(), &folder_id2))
@@ -2558,13 +2559,19 @@ static int mail_engine_mmakf(int argc, char **argv, int sockd)
25582559
if (me_get_folder_id_raw(pidb.get(), decoded_name) != 0)
25592560
return MIDB_E_FOLDER_EXISTS;
25602561

2562+
/*
2563+
* Example:
2564+
* @decoded_name := A/B/C/D/E (input)
2565+
* @parent_name = stepwise A, A/B, A/B/C, A/B/C/D (path/level where to operate)
2566+
* @temp_name = stepwise A, B, C, D (parent name)
2567+
*/
25612568
const char *ptoken = decoded_name.c_str(), *ptoken1;
25622569
uint64_t folder_id1 = PRIVATE_FID_IPMSUBTREE;
25632570
while ((ptoken1 = strchr(ptoken, '/')) != NULL) {
2564-
std::string temp_name(ptoken, ptoken1 - ptoken);
25652571
auto parent_name = std::string_view(decoded_name.c_str(), ptoken1 - decoded_name.c_str());
2566-
auto folder_id2 = mail_engine_get_folder_id(pidb.get(), parent_name);
2572+
auto folder_id2 = me_get_folder_id_raw(pidb.get(), parent_name);
25672573
if (0 == folder_id2) {
2574+
std::string temp_name(ptoken, ptoken1 - ptoken);
25682575
if (!common_util_create_folder(argv[1],
25692576
user_id, rop_util_make_eid_ex(1, folder_id1),
25702577
temp_name.c_str(), &folder_id2))

0 commit comments

Comments
 (0)