Pārlūkot izejas kodu

accept NAMESPACE responses without hierarchy delimiter

RFC2342 states that the delimiter may be NIL, which some servers
apparently actually make use of.

REFMAIL: CAM0xXk_FQ83CPrd37iQCMKtc1B2P8=u-r5jX0n2WE5Y+3483nQ@mail.gmail.com
Oswald Buddenhagen 8 gadi atpakaļ
vecāks
revīzija
ef0e7fdd3e
1 mainītis faili ar 12 papildinājumiem un 6 dzēšanām
  1. 12 6
      src/drv_imap.c

+ 12 - 6
src/drv_imap.c

@@ -637,6 +637,12 @@ next_arg( char **ps )
 	return ret;
 }
 
+static int
+is_opt_atom( list_t *list )
+{
+	return list && list->val && list->val != LIST;
+}
+
 static int
 is_atom( list_t *list )
 {
@@ -850,7 +856,7 @@ parse_namespace_check( list_t *list )
 			goto bad;
 		if (!is_atom( list->child ))
 			goto bad;
-		if (!is_atom( list->child->next ))
+		if (!is_opt_atom( list->child->next ))
 			goto bad;
 		/* Namespace response extensions may follow here; we don't care. */
 	}
@@ -2147,17 +2153,17 @@ static void
 imap_open_store_namespace2( imap_store_t *ctx )
 {
 	imap_store_conf_t *cfg = (imap_store_conf_t *)ctx->gen.conf;
-	list_t *nsp, *nsp_1st, *nsp_1st_ns, *nsp_1st_dl;
+	list_t *nsp, *nsp_1st;
 
 	/* XXX for now assume 1st personal namespace */
 	if (is_list( (nsp = ctx->ns_personal) ) &&
-	    is_list( (nsp_1st = nsp->child) ) &&
-	    is_atom( (nsp_1st_ns = nsp_1st->child) ) &&
-	    is_atom( (nsp_1st_dl = nsp_1st_ns->next) ))
+	    is_list( (nsp_1st = nsp->child) ))
 	{
+		list_t *nsp_1st_ns = nsp_1st->child;
+		list_t *nsp_1st_dl = nsp_1st_ns->next;
 		if (!ctx->prefix && cfg->use_namespace)
 			ctx->prefix = nsp_1st_ns->val;
-		if (!ctx->delimiter)
+		if (!ctx->delimiter && is_atom( nsp_1st_dl ))
 			ctx->delimiter = nfstrdup( nsp_1st_dl->val );
 	}
 	imap_open_store_finalize( ctx );