From: Sean Bright Date: Wed, 8 Mar 2023 14:12:48 +0000 (-0500) Subject: res_agi: RECORD FILE plays 2 beeps. X-Git-Tag: 21.0.0-pre1~130 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=76a2b2703f6de02b9539bb976a128a6f82c59d62;p=thirdparty%2Fasterisk.git 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 --- diff --git a/res/res_agi.c b/res/res_agi.c index cafe13ba2d..6debae1404 100644 --- a/res/res_agi.c +++ b/res/res_agi.c @@ -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]);