summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2018-09-30 21:42:40 +0100
committerJeremy Harris <jgh146exb@wizmail.org>2018-09-30 21:42:40 +0100
commit9d03af0a7d6bfcc13156ce8fd676ce00dd32d228 (patch)
tree11024de3c656d491d12a0a27ae64779c469e78ff
parent8fdf20fd84ec88d8f8a250f56d2b4d29ba946392 (diff)
Expansions: fix json extract for de-wrapping nested objects. Bug 2322
-rw-r--r--src/src/expand.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/src/expand.c b/src/src/expand.c
index 43f572eca..4a88b4446 100644
--- a/src/src/expand.c
+++ b/src/src/expand.c
@@ -3869,6 +3869,8 @@ static uschar *
dewrap(uschar * s, const uschar * wrap)
{
uschar * p = s;
+unsigned depth = 0;
+BOOL quotesmode = wrap[0] == wrap[1];
while (isspace(*p)) p++;
@@ -3879,11 +3881,15 @@ if (*p == *wrap)
while (*p)
{
if (*p == '\\') p++;
+ else if (!quotesmode && *p == wrap[-1]) depth++;
else if (*p == *wrap)
- {
- *p = '\0';
- return s;
- }
+ if (depth == 0)
+ {
+ *p = '\0';
+ return s;
+ }
+ else
+ depth--;
p++;
}
}
@@ -3917,7 +3923,9 @@ for (item = s;
case '}': object_depth--; break;
}
*list = *s ? s+1 : s;
-return string_copyn(item, s - item);
+item = string_copyn(item, s - item);
+DEBUG(D_expand) debug_printf_indent(" json ele: '%s'\n", item);
+return US item;
}