make sure that all IMAP lists are parsed

... even if we ignore their contents, as they may (hypothetically)
contain literals, which are relevant for the stream syntax.

amends 6fd4e8de2.
This commit is contained in:
Oswald Buddenhagen 2021-11-24 22:33:30 +01:00
parent a07be5f175
commit 5048521d79

View File

@ -1028,15 +1028,20 @@ parse_namespace_rsp( imap_store_t *ctx, list_t *list )
return parse_next_list( ctx, parse_namespace_rsp_p2 ); return parse_next_list( ctx, parse_namespace_rsp_p2 );
} }
// Note that parse_list_rsp() below refers to these as well.
static int static int
parse_namespace_rsp_p2( imap_store_t *ctx, list_t *list ATTR_UNUSED ) parse_namespace_rsp_p2( imap_store_t *ctx, list_t *list )
{ {
if (!list)
return parse_list_perror( ctx );
return parse_next_list( ctx, parse_namespace_rsp_p3 ); return parse_next_list( ctx, parse_namespace_rsp_p3 );
} }
static int static int
parse_namespace_rsp_p3( imap_store_t *ctx ATTR_UNUSED, list_t *list ATTR_UNUSED ) parse_namespace_rsp_p3( imap_store_t *ctx, list_t *list )
{ {
if (!list)
return parse_list_perror( ctx );
return LIST_OK; return LIST_OK;
} }
@ -1378,7 +1383,7 @@ parse_list_rsp( imap_store_t *ctx, list_t *list )
return parse_list_perror( ctx ); return parse_list_perror( ctx );
for (lp = list->child; lp; lp = lp->next) for (lp = list->child; lp; lp = lp->next)
if (is_atom( lp ) && !strcasecmp( lp->val, "\\NoSelect" )) if (is_atom( lp ) && !strcasecmp( lp->val, "\\NoSelect" ))
return LIST_OK; return parse_next_list( ctx, parse_namespace_rsp_p2 ); // (sic!)
return parse_next_list( ctx, parse_list_rsp_p1 ); return parse_next_list( ctx, parse_list_rsp_p1 );
} }