res_agi: RECORD FILE plays 2 beeps.

Sending the "RECORD FILE" command without the optional
`offset_samples` argument can result in two beeps playing on the
channel.

This bug has been present since Asterisk 0.3.0 (2003-02-06).

ASTERISK-30457 #close

Change-Id: I95e88aa59378784d7f0eb648843f090e6723b787
(cherry picked from commit a3ec3efa02)
This commit is contained in:
Sean Bright 2023-03-08 09:12:48 -05:00 committed by Asterisk Development Team
parent e104bd0852
commit b376d16d81
1 changed files with 11 additions and 5 deletions

View File

@ -2955,12 +2955,18 @@ static int handle_recordfile(struct ast_channel *chan, AGI *agi, int argc, const
/* backward compatibility, if no offset given, arg[6] would have been
* caught below and taken to be a beep, else if it is a digit then it is a
* offset */
if ((argc >6) && (sscanf(argv[6], "%30ld", &sample_offset) != 1) && (!strchr(argv[6], '=')))
res = ast_streamfile(chan, "beep", ast_channel_language(chan));
if ((argc > 7) && (!strchr(argv[7], '=')))
* offset.
*
* In other words, if the argument does not look like the offset_samples
* argument (a number) and it doesn't look like the silence argument (starts
* with "s=") then it must be the beep argument. The beep argument has no
* required value, the presence of anything in the argument slot we are
* inspecting is an indication that the user wants a beep played.
*/
if ((argc > 6 && sscanf(argv[6], "%30ld", &sample_offset) != 1 && !ast_begins_with(argv[6], "s="))
|| (argc > 7 && !ast_begins_with(argv[7], "s="))) {
res = ast_streamfile(chan, "beep", ast_channel_language(chan));
}
if (!res)
res = ast_waitstream(chan, argv[4]);