]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: fix odd memory mgmt in clist strings fn 2774/head
authorQuentin Young <qlyoung@cumulusnetworks.com>
Thu, 2 Aug 2018 17:27:41 +0000 (17:27 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Tue, 7 Aug 2018 19:17:32 +0000 (19:17 +0000)
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
bgpd/bgp_clist.c

index fec4397b73c99d2b42cd3aa9b1a65db64b8c0e4f..3a93db1ac6cea8d4f190716d675912ed5f7ddff0 100644 (file)
@@ -332,141 +332,70 @@ community_list_entry_lookup(struct community_list *list, const void *arg,
 
 static char *community_str_get(struct community *com, int i)
 {
-       int len;
        uint32_t comval;
        uint16_t as;
        uint16_t val;
        char *str;
-       char *pnt;
 
        memcpy(&comval, com_nthval(com, i), sizeof(uint32_t));
        comval = ntohl(comval);
 
        switch (comval) {
        case COMMUNITY_INTERNET:
-               len = strlen(" internet");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "internet");
                break;
        case COMMUNITY_GSHUT:
-               len = strlen(" graceful-shutdown");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "graceful-shutdown");
                break;
        case COMMUNITY_ACCEPT_OWN:
-               len = strlen(" accept-own");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "accept-own");
                break;
        case COMMUNITY_ROUTE_FILTER_TRANSLATED_v4:
-               len = strlen(" route-filter-translated-v4");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR,
+                             "route-filter-translated-v4");
                break;
        case COMMUNITY_ROUTE_FILTER_v4:
-               len = strlen(" route-filter-v4");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "route-filter-v4");
                break;
        case COMMUNITY_ROUTE_FILTER_TRANSLATED_v6:
-               len = strlen(" route-filter-translated-v6");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR,
+                             "route-filter-translated-v6");
                break;
        case COMMUNITY_ROUTE_FILTER_v6:
-               len = strlen(" route-filter-v6");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "route-filter-v6");
                break;
        case COMMUNITY_LLGR_STALE:
-               len = strlen(" llgr-stale");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "llgr-stale");
                break;
        case COMMUNITY_NO_LLGR:
-               len = strlen(" no-llgr");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "no-llgr");
                break;
        case COMMUNITY_ACCEPT_OWN_NEXTHOP:
-               len = strlen(" accept-own-nexthop");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "accept-own-nexthop");
                break;
        case COMMUNITY_BLACKHOLE:
-               len = strlen(" blackhole");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "blackhole");
                break;
        case COMMUNITY_NO_EXPORT:
-               len = strlen(" no-export");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "no-export");
                break;
        case COMMUNITY_NO_ADVERTISE:
-               len = strlen(" no-advertise");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "no-advertise");
                break;
        case COMMUNITY_LOCAL_AS:
-               len = strlen(" local-AS");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "local-AS");
                break;
        case COMMUNITY_NO_PEER:
-               len = strlen(" no-peer");
-               break;
-       default:
-               len = strlen(" 65536:65535");
-               break;
-       }
-
-       /* Allocate memory.  */
-       str = pnt = XMALLOC(MTYPE_COMMUNITY_STR, len);
-
-       switch (comval) {
-       case COMMUNITY_INTERNET:
-               strcpy(pnt, "internet");
-               pnt += strlen("internet");
-               break;
-       case COMMUNITY_GSHUT:
-               strcpy(pnt, "graceful-shutdown");
-               pnt += strlen("graceful-shutdown");
-               break;
-       case COMMUNITY_ACCEPT_OWN:
-               strcpy(pnt, "accept-own");
-               pnt += strlen("accept-own");
-               break;
-       case COMMUNITY_ROUTE_FILTER_TRANSLATED_v4:
-               strcpy(pnt, "route-filter-translated-v4");
-               pnt += strlen("route-filter-translated-v4");
-               break;
-       case COMMUNITY_ROUTE_FILTER_v4:
-               strcpy(pnt, "route-filter-v4");
-               pnt += strlen("route-filter-v4");
-               break;
-       case COMMUNITY_ROUTE_FILTER_TRANSLATED_v6:
-               strcpy(pnt, "route-filter-translated-v6");
-               pnt += strlen("route-filter-translated-v6");
-               break;
-       case COMMUNITY_ROUTE_FILTER_v6:
-               strcpy(pnt, "route-filter-v6");
-               pnt += strlen("route-filter-v6");
-               break;
-       case COMMUNITY_LLGR_STALE:
-               strcpy(pnt, "llgr-stale");
-               pnt += strlen("llgr-stale");
-               break;
-       case COMMUNITY_NO_LLGR:
-               strcpy(pnt, "no-llgr");
-               pnt += strlen("no-llgr");
-               break;
-       case COMMUNITY_ACCEPT_OWN_NEXTHOP:
-               strcpy(pnt, "accept-own-nexthop");
-               pnt += strlen("accept-own-nexthop");
-               break;
-       case COMMUNITY_BLACKHOLE:
-               strcpy(pnt, "blackhole");
-               pnt += strlen("blackhole");
-               break;
-       case COMMUNITY_NO_EXPORT:
-               strcpy(pnt, "no-export");
-               pnt += strlen("no-export");
-               break;
-       case COMMUNITY_NO_ADVERTISE:
-               strcpy(pnt, "no-advertise");
-               pnt += strlen("no-advertise");
-               break;
-       case COMMUNITY_LOCAL_AS:
-               strcpy(pnt, "local-AS");
-               pnt += strlen("local-AS");
-               break;
-       case COMMUNITY_NO_PEER:
-               strcpy(pnt, "no-peer");
-               pnt += strlen("no-peer");
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "no-peer");
                break;
        default:
+               str = XSTRDUP(MTYPE_COMMUNITY_STR, "65536:65535");
                as = (comval >> 16) & 0xFFFF;
                val = comval & 0xFFFF;
-               sprintf(pnt, "%u:%d", as, val);
-               pnt += strlen(pnt);
+               snprintf(str, strlen(str), "%u:%d", as, val);
                break;
        }
 
-       *pnt = '\0';
-
        return str;
 }