[asterisk-bugs] [JIRA] (ASTERISK-28459) pbx: Asterisk is dropping part of a string passed to functions
Joshua C. Colp (JIRA)
noreply at issues.asterisk.org
Mon Jun 24 05:28:47 CDT 2019
[ https://issues.asterisk.org/jira/browse/ASTERISK-28459?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Joshua C. Colp updated ASTERISK-28459:
--------------------------------------
Summary: pbx: Asterisk is dropping part of a string passed to functions (was: Asterisk is dropping part of a string passed to functions)
> pbx: Asterisk is dropping part of a string passed to functions
> --------------------------------------------------------------
>
> Key: ASTERISK-28459
> URL: https://issues.asterisk.org/jira/browse/ASTERISK-28459
> Project: Asterisk
> Issue Type: Bug
> Security Level: None
> Components: Core/PBX, Functions/General
> Affects Versions: 16.4.0
> Environment: CentOS Linux release 7.6 with Asterisk 16.4.0
> Reporter: Jan Blom
> Severity: Minor
>
> We need to pass around variables containing special characters, i.e. non-alfanumeric chars. This typically include SIP Call-Id from some vendors.
> We have so far managed to deal with all situations using quotes and escape character in accordance with https://wiki.asterisk.org/wiki/display/AST/Parameter+Quoting.
> However when having a string containing a closing parenthesis _and_ a colon, the string gets cut-off when passing it to a function. This becomes a big issue for us since this affects ODBC database calls as well as for example SQL_ESC() function.
> Calling this dialplan results in the output below:
> {code}
> [test]
> exten => main,1,NoOp
> same => n,Set(LOCAL(input)=1234ab)cd:efg)
> same => n,Verbose(0,--- Test 1 ---)
> same => n,Verbose(0,Input: ${input})
> same => n,Gosub(sub,1(${input}))
> same => n,Set(LOCAL(output)=${GOSUB_RETVAL})
> same => n,Verbose(0,Output: ${output})
> same => n,Verbose(0,Function: ${PASSTHRU(${input})})
> same => n,Verbose(0,--- Test 2 ---)
> same => n,Verbose(0,Input: ${input})
> same => n,Gosub(sub,1("${input}"))
> same => n,Set(LOCAL(output)=${GOSUB_RETVAL})
> same => n,Verbose(0,Output: ${output})
> same => n,Verbose(0,Function: ${PASSTHRU("${input}")})
> same => n,Verbose(0,--- Test done ---)
> same => n,Return
> exten => sub,1,NoOp
> same => n,Verbose(0,In sub: ${ARG1})
> same => n,Return(${ARG1})
> {code}
> Result:
> {noformat}
> --- Test 1 ---
> Input: 1234ab)cd:efg
> In sub: 1234ab)cd:efg
> Output: 1234ab)cd:efg
> Function: 1234ab
> --- Test 2 ---
> Input: 1234ab)cd:efg
> In sub: "1234ab)cd:efg"
> Output: "1234ab)cd:efg"
> Function: "1234ab
> --- Test done ---
> {noformat}
> You can see the cut-off string returned from PASSTHRU(). We could use any function that takes a string as input and have the same result. The test shows that calling subroutines with Gosub works fine though.
> It doesn't matter if we surround the string in quotes (the difference between Test 1 ans Test 2) or if we escape the parenthesis and/or colon in any combination with a backslash. We always get the corrupted string passed into the function.
> We haven't been able to find any workaround to this problem. It breaks our database calling, using ODBC.
--
This message was sent by Atlassian JIRA
(v6.2#6252)
More information about the asterisk-bugs
mailing list