mirror of
https://github.com/asterisk/asterisk.git
synced 2026-05-04 20:33:53 +00:00
Add a workaround for func_odbc/ARRAY() for problems that occur with certain special characters.
In certain cases, due to the way Set() works in 1.4, values may not get set properly. This is a workaround for 1.4 only that corrects for these issues, without making func_odbc more difficult to use properly. (closes issue #14614) Reported by: wdoekes Patches: 20090309__bug14614__2.diff.txt uploaded by tilghman (license 14) double_set_unescape_workaround_for_func_odbc.osso-and-tilghman-1.diff uploaded by wdoekes (license 717) Tested by: wdoekes, tilghman git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@189537 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -162,6 +162,23 @@ static struct ast_custom_function regex_function = {
|
||||
.read = regex,
|
||||
};
|
||||
|
||||
static int strecmp(const char *pre, const char *post)
|
||||
{
|
||||
int res;
|
||||
for (; *pre && *post; pre++, post++) {
|
||||
if (*pre == '"') {
|
||||
post--;
|
||||
continue;
|
||||
} else if (*pre == '\\') {
|
||||
pre++;
|
||||
}
|
||||
if ((res = strncmp(pre, post, 1))) {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
return strncmp(pre, post, 1);
|
||||
}
|
||||
|
||||
static int array(struct ast_channel *chan, char *cmd, char *var,
|
||||
const char *value)
|
||||
{
|
||||
@@ -174,6 +191,15 @@ static int array(struct ast_channel *chan, char *cmd, char *var,
|
||||
char *value2;
|
||||
int i;
|
||||
|
||||
if (chan) {
|
||||
const char *value3;
|
||||
ast_mutex_lock(&chan->lock);
|
||||
if ((value3 = pbx_builtin_getvar_helper(chan, "~ODBCVALUES~")) && strecmp(value3, value) == 0) {
|
||||
value = ast_strdupa(value3);
|
||||
}
|
||||
ast_mutex_unlock(&chan->lock);
|
||||
}
|
||||
|
||||
value2 = ast_strdupa(value);
|
||||
if (!var || !value2)
|
||||
return -1;
|
||||
|
||||
Reference in New Issue
Block a user