changeset 22798:30265531b608

lib: Support nested keys in var_get_key_range_full Fixes problems with %{if...} failed: if: requires four or five parameters, got 1
author Aki Tuomi <aki.tuomi@dovecot.fi>
date Fri, 01 Dec 2017 14:53:46 +0200
parents 2c72506cd19a
children d92381842a4f
files src/lib/var-expand.c
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/var-expand.c	Thu Jan 25 12:27:41 2018 +0200
+++ b/src/lib/var-expand.c	Fri Dec 01 14:53:46 2017 +0200
@@ -639,11 +639,17 @@
 		*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;