Ensure the arguments are initialized. Also miscellaneous CG cleanup.
authorTilghman Lesher <tilghman@meg.abyt.es>
Wed, 12 May 2010 16:23:26 +0000 (16:23 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Wed, 12 May 2010 16:23:26 +0000 (16:23 +0000)
(closes issue #16576)
 Reported by: uxbod
 Patches:
       20100505__issue16576.diff.txt uploaded by tilghman (license 14)
 Tested by: uxbod

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@262656 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_privacy.c

index 3d324cb..e0c102d 100644 (file)
@@ -21,7 +21,7 @@
  * \brief Block all calls without Caller*ID, require phone # to be entered
  *
  * \author Mark Spencer <markster@digium.com>
  * \brief Block all calls without Caller*ID, require phone # to be entered
  *
  * \author Mark Spencer <markster@digium.com>
- * 
+ *
  * \ingroup applications
  */
 
  * \ingroup applications
  */
 
@@ -101,48 +101,55 @@ static int privacy_exec(struct ast_channel *chan, const char *data)
        } else {
                /*Answer the channel if it is not already*/
                if (chan->_state != AST_STATE_UP) {
        } else {
                /*Answer the channel if it is not already*/
                if (chan->_state != AST_STATE_UP) {
-                       if ((res = ast_answer(chan)))
+                       if ((res = ast_answer(chan))) {
                                return -1;
                                return -1;
+                       }
                }
 
                }
 
-               if (!ast_strlen_zero(data)) {
-                       parse = ast_strdupa(data);
-                       
-                       AST_STANDARD_APP_ARGS(args, parse);
+               parse = ast_strdupa(S_OR(data, ""));
 
 
-                       if (args.maxretries) {
-                               if (sscanf(args.maxretries, "%30d", &x) == 1)
-                                       maxretries = x;
-                               else
-                                       ast_log(LOG_WARNING, "Invalid max retries argument\n");
+               AST_STANDARD_APP_ARGS(args, parse);
+
+               if (!ast_strlen_zero(args.maxretries)) {
+                       if (sscanf(args.maxretries, "%30d", &x) == 1 && x > 0) {
+                               maxretries = x;
+                       } else {
+                               ast_log(LOG_WARNING, "Invalid max retries argument: '%s'\n", args.maxretries);
                        }
                        }
-                       if (args.minlength) {
-                               if (sscanf(args.minlength, "%30d", &x) == 1)
-                                       minlength = x;
-                               else
-                                       ast_log(LOG_WARNING, "Invalid min length argument\n");
+               }
+               if (!ast_strlen_zero(args.minlength)) {
+                       if (sscanf(args.minlength, "%30d", &x) == 1 && x > 0) {
+                               minlength = x;
+                       } else {
+                               ast_log(LOG_WARNING, "Invalid min length argument: '%s'\n", args.minlength);
                        }
                        }
-               }               
+               }
 
                /* Play unidentified call */
                res = ast_safe_sleep(chan, 1000);
 
                /* Play unidentified call */
                res = ast_safe_sleep(chan, 1000);
-               if (!res)
+               if (!res) {
                        res = ast_streamfile(chan, "privacy-unident", chan->language);
                        res = ast_streamfile(chan, "privacy-unident", chan->language);
-               if (!res)
+               }
+               if (!res) {
                        res = ast_waitstream(chan, "");
                        res = ast_waitstream(chan, "");
+               }
 
                /* Ask for 10 digit number, give 3 attempts */
                for (retries = 0; retries < maxretries; retries++) {
 
                /* Ask for 10 digit number, give 3 attempts */
                for (retries = 0; retries < maxretries; retries++) {
-                       if (!res)
+                       if (!res) {
                                res = ast_streamfile(chan, "privacy-prompt", chan->language);
                                res = ast_streamfile(chan, "privacy-prompt", chan->language);
-                       if (!res)
+                       }
+                       if (!res) {
                                res = ast_waitstream(chan, "");
                                res = ast_waitstream(chan, "");
+                       }
 
 
-                       if (!res ) 
+                       if (!res) {
                                res = ast_readstring(chan, phone, sizeof(phone) - 1, /* digit timeout ms */ 3200, /* first digit timeout */ 5000, "#");
                                res = ast_readstring(chan, phone, sizeof(phone) - 1, /* digit timeout ms */ 3200, /* first digit timeout */ 5000, "#");
+                       }
 
 
-                       if (res < 0)
+                       if (res < 0) {
                                break;
                                break;
+                       }
 
                        /* Make sure we get at least digits */
                        if (strlen(phone) >= minlength ) {
 
                        /* Make sure we get at least digits */
                        if (strlen(phone) >= minlength ) {
@@ -161,25 +168,27 @@ static int privacy_exec(struct ast_channel *chan, const char *data)
                                }
                        } else {
                                res = ast_streamfile(chan, "privacy-incorrect", chan->language);
                                }
                        } else {
                                res = ast_streamfile(chan, "privacy-incorrect", chan->language);
-                               if (!res)
+                               if (!res) {
                                        res = ast_waitstream(chan, "");
                                        res = ast_waitstream(chan, "");
+                               }
                        }
                }
                        }
                }
-               
+
                /* Got a number, play sounds and send them on their way */
                /* Got a number, play sounds and send them on their way */
-               if ((retries < maxretries) && res >= 0 ) {
+               if ((retries < maxretries) && res >= 0) {
                        res = ast_streamfile(chan, "privacy-thankyou", chan->language);
                        res = ast_streamfile(chan, "privacy-thankyou", chan->language);
-                       if (!res)
+                       if (!res) {
                                res = ast_waitstream(chan, "");
                                res = ast_waitstream(chan, "");
+                       }
 
 
-                       ast_set_callerid (chan, phone, "Privacy Manager", NULL); 
+                       ast_set_callerid(chan, phone, "Privacy Manager", NULL);
 
                        /* Clear the unavailable presence bit so if it came in on PRI
                         * the caller id will now be passed out to other channels
                         */
                        chan->cid.cid_pres &= (AST_PRES_UNAVAILABLE ^ 0xFF);
 
 
                        /* Clear the unavailable presence bit so if it came in on PRI
                         * the caller id will now be passed out to other channels
                         */
                        chan->cid.cid_pres &= (AST_PRES_UNAVAILABLE ^ 0xFF);
 
-                       ast_verb(3, "Changed Caller*ID to %s, callerpres to %d\n",phone,chan->cid.cid_pres);
+                       ast_verb(3, "Changed Caller*ID to '%s', callerpres to %d\n", phone, chan->cid.cid_pres);
 
                        pbx_builtin_setvar_helper(chan, "PRIVACYMGRSTATUS", "SUCCESS");
                } else {
 
                        pbx_builtin_setvar_helper(chan, "PRIVACYMGRSTATUS", "SUCCESS");
                } else {
@@ -192,7 +201,7 @@ static int privacy_exec(struct ast_channel *chan, const char *data)
 
 static int unload_module(void)
 {
 
 static int unload_module(void)
 {
-       return ast_unregister_application (app);
+       return ast_unregister_application(app);
 }
 
 static int load_module(void)
 }
 
 static int load_module(void)