diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-05-27 13:13:17 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-05-27 13:13:17 +0000 |
commit | 6705ac3b96b2320190cb3b5010e86764cd2b80d3 (patch) | |
tree | 3801e40204f1403620f0f19ead8493faff7341e1 /pbx/pbx_realtime.c | |
parent | 0fc5cd015e1c7a719014d8806f3413e0c9e29be0 (diff) |
In compat14 mode, don't translate pipes inside expressions, as they aren't
argument delimiters, but rather 'or' symbols.
(Closes issue #12723)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@118300 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx/pbx_realtime.c')
-rw-r--r-- | pbx/pbx_realtime.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/pbx/pbx_realtime.c b/pbx/pbx_realtime.c index ea2ee9bab..6e5a9f7e1 100644 --- a/pbx/pbx_realtime.c +++ b/pbx/pbx_realtime.c @@ -181,17 +181,26 @@ static int realtime_exec(struct ast_channel *chan, const char *context, const ch else if (!strcasecmp(v->name, "appdata")) { if (!compat16) { char *ptr; + int in = 0; tmp = alloca(strlen(v->value) * 2 + 1); for (ptr = tmp; *v->value; v->value++) { if (*v->value == ',') { *ptr++ = '\\'; *ptr++ = ','; - } else if (*v->value == '|') { + } else if (*v->value == '|' && !in) { *ptr++ = ','; } else { *ptr++ = *v->value; } + + /* Don't escape '|', meaning 'or', inside expressions ($[ ]) */ + if (v->value[0] == '[' && v->value[-1] == '$') { + in++; + } else if (v->value[0] == ']' && in) { + in--; + } } + *ptr = '\0'; } else { tmp = ast_strdupa(v->value); } |