summaryrefslogtreecommitdiff
path: root/bgpd/bgp_community_alias.c
diff options
context:
space:
mode:
authorIgor Ryzhov <iryzhov@nfware.com>2021-08-11 12:09:15 +0300
committerIgor Ryzhov <iryzhov@nfware.com>2021-08-11 12:09:15 +0300
commit15bc6a40d3bf86bec574244ce89150a73774dd80 (patch)
tree1124f81338f73314824e44fd5ae73e2120ba7c5a /bgpd/bgp_community_alias.c
parent854571290b6dd1b3924e8b88ba7425931008fb5a (diff)
bgpd: fix memory leaks in bgp_alias2community_str
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
Diffstat (limited to 'bgpd/bgp_community_alias.c')
-rw-r--r--bgpd/bgp_community_alias.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/bgpd/bgp_community_alias.c b/bgpd/bgp_community_alias.c
index 5f45e19a3b..793f3ac9ac 100644
--- a/bgpd/bgp_community_alias.c
+++ b/bgpd/bgp_community_alias.c
@@ -175,22 +175,25 @@ const char *bgp_alias2community(char *alias)
* This is a helper to convert already aliased version
* of communities into numerical-only format.
*/
-const char *bgp_alias2community_str(const char *str)
+char *bgp_alias2community_str(const char *str)
{
char **aliases;
- int num;
+ char *comstr;
+ int num, i;
frrstr_split(str, " ", &aliases, &num);
- const char *communities[num + 1];
+ const char *communities[num];
- for (int i = 0; i < num; i++) {
- communities[i] =
- XSTRDUP(MTYPE_TMP, bgp_alias2community(aliases[i]));
+ for (i = 0; i < num; i++)
+ communities[i] = bgp_alias2community(aliases[i]);
+
+ comstr = frrstr_join(communities, num, " ");
+
+ for (i = 0; i < num; i++)
XFREE(MTYPE_TMP, aliases[i]);
- }
XFREE(MTYPE_TMP, aliases);
- return frrstr_join(communities, num, " ");
+ return comstr;
}
static int bgp_community_alias_vector_walker(struct hash_bucket *bucket,