]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_fax: Handle fax gateway being started more than once.
authorJoshua Colp <jcolp@digium.com>
Wed, 29 Aug 2018 10:18:08 +0000 (07:18 -0300)
committerJoshua Colp <jcolp@digium.com>
Wed, 29 Aug 2018 10:20:15 +0000 (05:20 -0500)
The T.38 fax gateway state machine can cause the fax gateway
to be started more than once on a channel depending on the
responses of the remote endpoint. This would previously leak
the channel name, channel unique id, and underlying fax engine
state. This change instead makes it so that if the fax gateway
session is already present and not reserved the fax gateway
is not started again.

ASTERISK-27981

Change-Id: I552d95086860cb18f2522ee40ef47b13b6da2e0e

res/res_fax.c

index 0938452460b5515e3137129c96ccc32b1ef24948..751dd67aa78b0be621d214e2eba16a62ea4ffcf6 100644 (file)
@@ -2912,6 +2912,11 @@ static int fax_gateway_start(struct fax_gateway *gateway, struct ast_fax_session
        struct ast_fax_session *s;
        int start_res;
 
+       /* if the fax gateway is already started then do nothing */
+       if (gateway->s && gateway->s->state != AST_FAX_STATE_RESERVED) {
+               return 0;
+       }
+
        /* create the FAX session */
        if (!(s = fax_session_new(details, chan, gateway->s, gateway->token))) {
                gateway->token = NULL;