[asterisk-bugs] [Asterisk 0014614]: [patch] func_odbc's OPT_ESCAPECOMMA's is undone by second ast_app_separate_args call when using Set(ARRAY...)
Asterisk Bug Tracker
noreply at bugs.digium.com
Mon Apr 20 17:03:09 CDT 2009
A NOTE has been added to this issue.
======================================================================
http://bugs.digium.com/view.php?id=14614
======================================================================
Reported By: wdoekes
Assigned To: tilghman
======================================================================
Project: Asterisk
Issue ID: 14614
Category: Functions/func_odbc
Reproducibility: always
Severity: major
Priority: normal
Status: closed
Asterisk Version: SVN
Regression: No
SVN Branch (only for SVN checkouts, not tarball releases): 1.4
SVN Revision (number only!): 180528
Request Review:
Resolution: fixed
Fixed in Version:
======================================================================
Date Submitted: 2009-03-06 07:20 CST
Last Modified: 2009-04-20 17:03 CDT
======================================================================
Summary: [patch] func_odbc's OPT_ESCAPECOMMA's is undone by
second ast_app_separate_args call when using Set(ARRAY...)
Description:
When returning more than one column with func_odbc custom functions, the
comma's that should separate the columns are not escaped. This happens when
setting the variables through the ARRAY function:
=== Example ===
(extensions.conf)
exten => _X.,1,Set(ARRAY(a|b)=${MY_ODBC_FUNC()})
(func_odbc.conf)
read=SELECT 'column, with comma', 1
The above results in:
${a} == "column", ${b} == ", with comma"
instead of:
${a} == "column, with comma", ${b} == 1
=== Cause ===
ast_app_separate_args is called twice on
"""ARRAY(a|b)=value\, with comma,1"""
once in pbx_builtin_setvar() (pbx.c) and once in array() (func_strings.c)
(through AST_NONSTANDARD_APP_ARGS).
The first one removes all the backslashes but doesn't split the arguments
because the delimiter is '|'.
Then you have """value, with comma,1""" which is split in three parts.
=== Problem ===
The problem lies in the double unescaping of the backslash and has nothing
to do with func_odbc per se. To set multiple variables at once, one must
do:
exten => _X.,1,Set(ARRAY(a|b|c)=1\\|2\\|3)
(double escape)
=== Solution ===
I don't know if the double unescaping is intended (according to my
O'Reilly book for 1.4 it isn't). When writing a Set statement without odbc
functions, one can double escape the comma, or resort to multiple Set
statements.
When using func_odbc, double-escaping the comma's could be a workaround.
See the attached patch.
======================================================================
----------------------------------------------------------------------
(0103504) svnbot (reporter) - 2009-04-20 17:03
http://bugs.digium.com/view.php?id=14614#c103504
----------------------------------------------------------------------
Repository: asterisk
Revision: 189538
_U trunk/
------------------------------------------------------------------------
r189538 | tilghman | 2009-04-20 17:03:08 -0500 (Mon, 20 Apr 2009) | 17
lines
Blocked revisions 189537 via svnmerge
........
r189537 | tilghman | 2009-04-20 17:02:16 -0500 (Mon, 20 Apr 2009) | 11
lines
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 http://bugs.digium.com/view.php?id=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
........
------------------------------------------------------------------------
http://svn.digium.com/view/asterisk?view=rev&revision=189538
Issue History
Date Modified Username Field Change
======================================================================
2009-04-20 17:03 svnbot Checkin
2009-04-20 17:03 svnbot Note Added: 0103504
======================================================================
More information about the asterisk-bugs
mailing list