From: Aki Tuomi Date: Fri, 1 Dec 2017 12:53:46 +0000 (+0200) Subject: lib: Support nested keys in var_get_key_range_full X-Git-Tag: 2.2.35~106 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=34676d2f7eb91fe93c834c54d04ef351b6ded4e1;p=thirdparty%2Fdovecot%2Fcore.git lib: Support nested keys in var_get_key_range_full Fixes problems with %{if...} failed: if: requires four or five parameters, got 1 --- diff --git a/src/lib/var-expand.c b/src/lib/var-expand.c index 2ed06bb3a9..c374014a0c 100644 --- a/src/lib/var-expand.c +++ b/src/lib/var-expand.c @@ -639,11 +639,17 @@ var_get_key_range_full(const char *str, unsigned int *idx_r, *size_r = str[i] == '\0' ? 0 : 1; return FALSE; } else { + unsigned int depth = 1; + bool escape = FALSE; /* long key */ *idx_r = ++i; for (; str[i] != '\0'; i++) { - if (str[i] == '}') - break; + if (str[i] == '{') + depth++; + if (str[i] == '}') { + if (--depth==0) + break; + } } *size_r = i - *idx_r; return TRUE;