Merged revisions 304638 via svnmerge from
authorSean Bright <sean@malleable.com>
Fri, 28 Jan 2011 20:19:57 +0000 (20:19 +0000)
committerSean Bright <sean@malleable.com>
Fri, 28 Jan 2011 20:19:57 +0000 (20:19 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r304638 | seanbright | 2011-01-28 15:19:08 -0500 (Fri, 28 Jan 2011) | 11 lines

  Restore some conditionals that we lost in r277814.

  There are some cases where ast_append_ha() is called with a NULL instead of a
  valid int pointer.  So if we get a NULL, don't try to dereference it.

  (closes issue #18162)
  Reported by: imcdona
  Patches:
        issue0018162.patch uploaded by pabelanger (license 224)
  Tested by: enegaard
........

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

main/acl.c

index 9f0c640..f3795c9 100644 (file)
@@ -421,7 +421,9 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
        if (!ast_sockaddr_parse(&ha->addr, address, PARSE_PORT_FORBID)) {
                ast_log(LOG_WARNING, "Invalid IP address: %s\n", address);
                ast_free_ha(ha);
-               *error = 1;
+               if (error) {
+                       *error = 1;
+               }
                return ret;
        }
 
@@ -443,7 +445,9 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
                if (!ast_sockaddr_parse(&ha->netmask, mask, PARSE_PORT_FORBID)) {
                        ast_log(LOG_WARNING, "Invalid netmask: %s\n", mask);
                        ast_free_ha(ha);
-                       *error = 1;
+                       if (error) {
+                               *error = 1;
+                       }
                        return ret;
                }
                /* If someone specifies an IPv4-mapped IPv6 netmask,
@@ -457,13 +461,17 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
                if (addr_is_v4 ^ mask_is_v4) {
                        ast_log(LOG_WARNING, "Address and mask are not using same address scheme.\n");
                        ast_free_ha(ha);
-                       *error = 1;
+                       if (error) {
+                               *error = 1;
+                       }
                        return ret;
                }
        } else if (parse_cidr_mask(&ha->netmask, addr_is_v4, mask)) {
                ast_log(LOG_WARNING, "Invalid CIDR netmask: %s\n", mask);
                ast_free_ha(ha);
-               *error = 1;
+               if (error) {
+                       *error = 1;
+               }
                return ret;
        }
 
@@ -475,7 +483,9 @@ struct ast_ha *ast_append_ha(const char *sense, const char *stuff, struct ast_ha
                char *failaddr = ast_strdupa(ast_sockaddr_stringify(&ha->addr));
                ast_log(LOG_WARNING, "Unable to apply netmask %s to address %s\n", failmask, failaddr);
                ast_free_ha(ha);
-               *error = 1;
+               if (error) {
+                       *error = 1;
+               }
                return ret;
        }