[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 Mar 9 16:12:28 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:                     assigned
Asterisk Version:           SVN 
Regression:                 No 
SVN Branch (only for SVN checkouts, not tarball releases):  1.4  
SVN Revision (number only!): 180528 
Request Review:              
====================================================================== 
Date Submitted:             2009-03-06 07:20 CST
Last Modified:              2009-03-09 16:12 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.
====================================================================== 

---------------------------------------------------------------------- 
 (0101419) tilghman (administrator) - 2009-03-09 16:12
 http://bugs.digium.com/view.php?id=14614#c101419 
---------------------------------------------------------------------- 
I've made the patch even better.  Now it compares the invisible string with
what was passed in and ensure that the passed in string, when escapes are
compensated for, matches the invisible string. 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2009-03-09 16:12 tilghman       Note Added: 0101419                          
======================================================================




More information about the asterisk-bugs mailing list