)]}'
{
  "log": [
    {
      "commit": "d3ac733b41b69826ac4b5a86b881f33f3d383941",
      "tree": "fc994220633cbc366d1d15fc8ea2619250efe582",
      "parents": [
        "1994dc81458d646120659b543ad7ffc023cd8579"
      ],
      "author": {
        "name": "Daniel Walton",
        "email": "dwalton@cumulusnetworks.com",
        "time": "Mon Aug 24 10:19:10 2015 -0400"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Sep 24 15:26:46 2015 +0100"
      },
      "message": "bgpd: \u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with a deny\n\n\u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with\na deny\n\nReviewed By: sharpd@cumulusnetworks.com\nTesting Done:\n\n\u0027set comm-list FOO delete\u0027 stops evaluating the community-list as soon as\nwe hit\nthe first \"delete\" statement. This makes it impossible to use\ncommunity-lists\nwhere you deny some subset of communities to delete and then permit all of\nthe\nothers.\n\nThis patch changes the behavior so that we no longer exit the\ncommunity-list at\nthe first delete statement. Here is our baseline, we are receiving multiple\ncommunities from 10.1.1.2 for the 10.1.3.0/24 prefix.\n\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3 20:1 20:2 20:3 99:1\n    Last update: Wed Mar 4 13:50:36 2015\n\nqct-ly6-04#\n\nWe apply the following FOO route-map inbound to this peer and soft clear\nthe peer\n!\nip community-list expanded BAD_COMMS permit 99:.*\nip community-list expanded BAD_COMMS deny 1:.*\nip community-list expanded BAD_COMMS permit 20.*\n!\nroute-map FOO permit 10\nset comm-list BAD_COMMS delete\n!\nrouter bgp 10\nneighbor 10.1.1.2 route-map FOO in\n!\n\nqct-ly6-04# clear ip bgp * soft in\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3\n    Last update: Wed Mar 4 13:51:12 2015\n\nqct-ly6-04#\nqct-ly6-04#\n\nWe deleted all communities flagged as \"permit\" by the BAD_COMMS\ncommunity-list\nwhile leaving the ones matched by \"deny 1:.*\" alone.\n\n #endif /* _QUAGGA_BGP_COMMUNITY_H */\n\n\u0027set comm-list delete\u0027 stops as soon as it hits a community-list entry with a deny\n\nTicket: CM-3513\nReviewed By: sharpd@cumulusnetworks.com\nTesting Done:\n\n\u0027set comm-list FOO delete\u0027 stops evaluating the community-list as soon as we hit\nthe first \"delete\" statement. This makes it impossible to use community-lists\nwhere you deny some subset of communities to delete and then permit all of the\nothers.\n\nThis patch changes the behavior so that we no longer exit the community-list at\nthe first delete statement. Here is our baseline, we are receiving multiple\ncommunities from 10.1.1.2 for the 10.1.3.0/24 prefix.\n\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3 20:1 20:2 20:3 99:1\n    Last update: Wed Mar 4 13:50:36 2015\n\nqct-ly6-04#\n\nWe apply the following FOO route-map inbound to this peer and soft clear the peer\n!\nip community-list expanded BAD_COMMS permit 99:.*\nip community-list expanded BAD_COMMS deny 1:.*\nip community-list expanded BAD_COMMS permit 20.*\n!\nroute-map FOO permit 10\nset comm-list BAD_COMMS delete\n!\nrouter bgp 10\nneighbor 10.1.1.2 route-map FOO in\n!\n\nqct-ly6-04# clear ip bgp * soft in\nqct-ly6-04# show ip bgp 10.1.3.0/24\n  BGP routing table entry for 10.1.3.0/24\n  Paths: (1 available, best #1, table Default-IP-Routing-Table)\n  Not advertised to any peer\n  Local\n  10.1.1.2 (metric 20) from 10.1.1.2 (10.1.1.2)\n    Origin IGP, metric 0, localpref 100, valid, internal, best\n    Community: 1:1 1:2 1:3\n    Last update: Wed Mar 4 13:51:12 2015\n\nqct-ly6-04#\nqct-ly6-04#\n\nWe deleted all communities flagged as \"permit\" by the BAD_COMMS community-list\nwhile leaving the ones matched by \"deny 1:.*\" alone.\n"
    },
    {
      "commit": "4c005e3f65a1f5b4592b1ebbac392cbb1a710998",
      "tree": "ec2feadf6fe20841a179d31714a053863919ae1e",
      "parents": [
        "3ef0b877f08344aa52367794aa4ec32b12becd6d"
      ],
      "author": {
        "name": "John Glotzer",
        "email": "glotzer@amazon.com",
        "time": "Mon Aug 04 19:39:23 2014 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Mon Aug 18 01:52:26 2014 +0200"
      },
      "message": "bgpd: memmove needed in community_del_val\n\nIn bgpd/bgp_community_del_val memcpy is used for potentially overlapping\nregions which is *not* safe. It may \"work\" in some cases but is not\nguaranteed to work in all cases. The case that I saw fail was on an\nx86_64 architecture with the number of bytes being moved/copied equal to\n8.\n\nThe way the code is written the uint32_t pointers will always differ by\n1, which is equivalent to a memcpy/memmove of regions that are 4 bytes\naway from one another. So the code failed while copying an 8 byte region\nto an address that is 4 bytes lower i.e. overlapping regions.\n\nInterestingly, the same architecture had no problems with a 12 byte\ncopy.\n\nWhen the code failed the communities were [200,300,400] and a call was\nmade to delete the 200 community. The result of this was an array that\nlooked like [400,400] which was uniquified to [400]. Of course the\nexpected result should have been [300, 400].\n\nOne additional point - in our production environment memmove would not\n*link* without including \u003cstring.h\u003e but in an isolated quagga git repo\nthis #include does not seem to be required and I see memmove is used in\nvtysh.c without this #include either.\n\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "c76275ee960c708408646d8a680b201b27cb9c1a",
      "tree": "59daf9a650950d35aa5350270118cd94e4a1fde3",
      "parents": [
        "6d85b15bbb2fd3c263d5d4b402c88ff348af877b"
      ],
      "author": {
        "name": "Jorge Boncompte [DTI2]",
        "email": "jorge@dti2.net",
        "time": "Mon May 07 16:52:55 2012 +0000"
      },
      "committer": {
        "name": "David Lamparter",
        "email": "equinox@opensourcerouting.org",
        "time": "Tue May 22 20:25:44 2012 +0200"
      },
      "message": "bgpd: optimize loops on [e]community_hash_make()\n\n  This change reduces loop count. Less jumps.\n\n* bgp_community.c: One loop per community.\n* bgp_ecommunity.c: One loop per ecommunity.\n\nSigned-off-by: Jorge Boncompte [DTI2] \u003cjorge@dti2.net\u003e\nSigned-off-by: David Lamparter \u003cequinox@opensourcerouting.org\u003e\n"
    },
    {
      "commit": "f6f434b2822c453f898552537180a812538bd19e",
      "tree": "81f5de3c1eeb6679635e7363396c08b807b04ad9",
      "parents": [
        "50ef565e4e689ba653b9709be4d28a01f6cca885"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Nov 23 21:28:03 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Mar 21 13:51:14 2011 +0000"
      },
      "message": "bgpd: Try fix extcommunity resource allocation probs, particularly with \u0027set extcom..\u0027\n\n* Extended communities has some kind of resource allocation problem which\n  causes a double-free if the \u0027set extcommunity ...\u0027 command is used.\n  Try fix by properly interning extcommunities.\n\n  Also, more generally, make unintern functions take a double pointer\n  so they can NULL out callers references - a usefully defensive programming\n  pattern for functions which make refs invalid.\n\n  Sadly, this patch doesn\u0027t fix the problem entirely - crashes still\n  occur on session clear.\n\n* bgp_ecommunity.h: (ecommunity_{free,unintern}) take double pointer\n  args.\n* bgp_community.h: (community_unintern) ditto\n* bgp_attr.h: (bgp_attr_intern) ditto\n* bgp_aspath.h: (bgp_aspath.h) ditto\n* (general) update all callers of above\n* bgp_routemap.c: (route_set_ecommunity_{rt,soo}) intern the new extcom added\n  to the attr, and unintern any old one.\n  (route_set_ecommunity_{rt,soo}_compile) intern the extcom to be used\n  for the route-map set.\n  (route_set_ecommunity_*_free) unintern to match, instead of free\n  (route_set_ecommunity_soo) Do as _rt does and don\u0027t just leak\n  any pre-existing community, add to it (is additive right though?)\n"
    },
    {
      "commit": "228da42898c4f7bd72d9c1ee4135108e8d40d860",
      "tree": "a780ed018bfeb97c174958f188c770c74a48bad9",
      "parents": [
        "54a15182e05ca757db3bb90a4135e9f8fd3c84f2"
      ],
      "author": {
        "name": "Chris Caputo",
        "email": "ccaputo@alt.net",
        "time": "Sat Jul 18 05:44:03 2009 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Sun Jul 19 18:28:08 2009 +0100"
      },
      "message": "[bgpd] Stability fixes including bugs 397, 492\n\nI\u0027ve spent the last several weeks working on stability fixes to bgpd.\nThese patches fix all of the numerous crashes, assertion failures, memory\nleaks and memory stomping I could find.  Valgrind was used extensively.\n\nAdded new function bgp_exit() to help catch problems.  If \"debug bgp\" is\nconfigured and bgpd exits with status of 0, statistics on remaining\nlib/memory.c allocations are printed to stderr.  It is my hope that other\ndevelopers will use this to stay on top of memory issues.\n\nExample questionable exit:\n\n  bgpd: memstats: Current memory utilization in module LIB:\n  bgpd: memstats:  Link List                     :          6\n  bgpd: memstats:  Link Node                     :          5\n  bgpd: memstats:  Hash                          :          8\n  bgpd: memstats:  Hash Bucket                   :          2\n  bgpd: memstats:  Hash Index                    :          8\n  bgpd: memstats:  Work queue                    :          3\n  bgpd: memstats:  Work queue item               :          2\n  bgpd: memstats:  Work queue name string        :          3\n  bgpd: memstats: Current memory utilization in module BGP:\n  bgpd: memstats:  BGP instance                  :          1\n  bgpd: memstats:  BGP peer                      :          1\n  bgpd: memstats:  BGP peer hostname             :          1\n  bgpd: memstats:  BGP attribute                 :          1\n  bgpd: memstats:  BGP extra attributes          :          1\n  bgpd: memstats:  BGP aspath                    :          1\n  bgpd: memstats:  BGP aspath str                :          1\n  bgpd: memstats:  BGP table                     :         24\n  bgpd: memstats:  BGP node                      :          1\n  bgpd: memstats:  BGP route                     :          1\n  bgpd: memstats:  BGP synchronise               :          8\n  bgpd: memstats:  BGP Process queue             :          1\n  bgpd: memstats:  BGP node clear queue          :          1\n  bgpd: memstats: NOTE: If configuration exists, utilization may be expected.\n\nExample clean exit:\n\n  bgpd: memstats: No remaining tracked memory utilization.\n\nThis patch fixes bug #397: \"Invalid free in bgp_announce_check()\".\n\nThis patch fixes bug #492: \"SIGBUS in bgpd/bgp_route.c:\nbgp_clear_route_node()\".\n\nMy apologies for not separating out these changes into individual patches.\nThe complexity of doing so boggled what is left of my brain.  I hope this\nis all still useful to the community.\n\nThis code has been production tested, in non-route-server-client mode, on\na linux 32-bit box and a 64-bit box.\n\nRelease/reset functions, used by bgp_exit(), added to:\n\n  bgpd/bgp_attr.c,h\n  bgpd/bgp_community.c,h\n  bgpd/bgp_dump.c,h\n  bgpd/bgp_ecommunity.c,h\n  bgpd/bgp_filter.c,h\n  bgpd/bgp_nexthop.c,h\n  bgpd/bgp_route.c,h\n  lib/routemap.c,h\n\nFile by file analysis:\n\n* bgpd/bgp_aspath.c: Prevent re-use of ashash after it is released.\n\n* bgpd/bgp_attr.c: #if removed uncalled cluster_dup().\n\n* bgpd/bgp_clist.c,h: Allow community_list_terminate() to be called from\n  bgp_exit().\n\n* bgpd/bgp_filter.c: Fix aslist-\u003ename use without allocation check, and\n  also fix memory leak.\n\n* bgpd/bgp_main.c: Created bgp_exit() exit routine.  This function frees\n  allocations made as part of bgpd initialization and, to some extent,\n  configuration.  If \"debug bgp\" is configured, memory stats are printed\n  as described above.\n\n* bgpd/bgp_nexthop.c: zclient_new() already allocates stream for\n  ibuf/obuf, so bgp_scan_init() shouldn\u0027t do it too.  Also, made it so\n  zlookup is global so bgp_exit() can use it.\n\n* bgpd/bgp_packet.c: bgp_capability_msg_parse() call to bgp_clear_route()\n  adjusted to use new BGP_CLEAR_ROUTE_NORMAL flag.\n\n* bgpd/bgp_route.h: Correct reference counter \"lock\" to be signed.\n  bgp_clear_route() now accepts a bgp_clear_route_type of either\n  BGP_CLEAR_ROUTE_NORMAL or BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n* bgpd/bgp_route.c:\n  - bgp_process_rsclient(): attr was being zero\u0027ed and then\n    bgp_attr_extra_free() was being called with it, even though it was\n    never filled with valid data.\n\n  - bgp_process_rsclient(): Make sure rsclient-\u003egroup is not NULL before\n    use.\n\n  - bgp_processq_del(): Add call to bgp_table_unlock().\n\n  - bgp_process(): Add call to bgp_table_lock().\n\n  - bgp_update_rsclient(): memset clearing of new_attr not needed since\n    declarationw with \"\u003d { 0 }\" does it.  memset was already commented\n    out.\n\n  - bgp_update_rsclient(): Fix screwed up misleading indentation.\n\n  - bgp_withdraw_rsclient(): Fix screwed up misleading indentation.\n\n  - bgp_clear_route_node(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n  - bgp_clear_node_queue_del(): Add call to bgp_table_unlock() and also\n    free struct bgp_clear_node_queue used for work item.\n\n  - bgp_clear_node_complete(): Do peer_unlock() after BGP_EVENT_ADD() in\n    case peer is released by peer_unlock() call.\n\n  - bgp_clear_route_table(): Support BGP_CLEAR_ROUTE_MY_RSCLIENT.  Use\n    struct bgp_clear_node_queue to supply data to worker.  Add call to\n    bgp_table_lock().\n\n  - bgp_clear_route(): Add support for BGP_CLEAR_ROUTE_NORMAL or\n    BGP_CLEAR_ROUTE_MY_RSCLIENT.\n\n  - bgp_clear_route_all(): Use BGP_CLEAR_ROUTE_NORMAL.\n\n  Bug 397 fixes:\n\n    - bgp_default_originate()\n    - bgp_announce_table()\n\n* bgpd/bgp_table.h:\n  - struct bgp_table: Added reference count.  Changed type of owner to be\n    \"struct peer *\" rather than \"void *\".\n\n  - struct bgp_node: Correct reference counter \"lock\" to be signed.\n\n* bgpd/bgp_table.c:\n  - Added bgp_table reference counting.\n\n  - bgp_table_free(): Fixed cleanup code.  Call peer_unlock() on owner if\n    set.\n\n  - bgp_unlock_node(): Added assertion.\n\n  - bgp_node_get(): Added call to bgp_lock_node() to code path that it was\n    missing from.\n\n* bgpd/bgp_vty.c:\n  - peer_rsclient_set_vty(): Call peer_lock() as part of peer assignment\n    to owner.  Handle failure gracefully.\n\n  - peer_rsclient_unset_vty(): Add call to bgp_clear_route() with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n* bgpd/bgp_zebra.c: Made it so zclient is global so bgp_exit() can use it.\n\n* bgpd/bgpd.c:\n  - peer_lock(): Allow to be called when status is \"Deleted\".\n\n  - peer_deactivate(): Supply BGP_CLEAR_ROUTE_NORMAL purpose to\n    bgp_clear_route() call.\n\n  - peer_delete(): Common variable listnode pn.  Fix bug in which rsclient\n    was only dealt with if not part of a peer group.  Call\n    bgp_clear_route() for rsclient, if appropriate, and do so with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n  - peer_group_get(): Use XSTRDUP() instead of strdup() for conf-\u003ehost.\n\n  - peer_group_bind(): Call bgp_clear_route() for rsclient, and do so with\n    BGP_CLEAR_ROUTE_MY_RSCLIENT purpose.\n\n  - bgp_create(): Use XSTRDUP() instead of strdup() for peer_self-\u003ehost.\n\n  - bgp_delete(): Delete peers before groups, rather than after.  And then\n    rather than deleting rsclients, verify that there are none at this\n    point.\n\n  - bgp_unlock(): Add assertion.\n\n  - bgp_free(): Call bgp_table_finish() rather than doing XFREE() itself.\n\n* lib/command.c,h: Compiler warning fixes.  Add cmd_terminate().  Fixed\n  massive leak in install_element() in which cmd_make_descvec() was being\n  called more than once for the same cmd-\u003estrvec/string/doc.\n\n* lib/log.c: Make closezlog() check fp before calling fclose().\n\n* lib/memory.c: Catch when alloc count goes negative by using signed\n  counts.  Correct #endif comment.  Add log_memstats_stderr().\n\n* lib/memory.h: Add log_memstats_stderr().\n\n* lib/thread.c: thread-\u003efuncname was being accessed in thread_call() after\n  it had been freed.  Rearranged things so that thread_call() frees\n  funcname.  Also made it so thread_master_free() cleans up cpu_record.\n\n* lib/vty.c,h: Use global command_cr.  Add vty_terminate().\n\n* lib/zclient.c,h: Re-enable zclient_free().\n"
    },
    {
      "commit": "730394d9a33dceb0699c5268afd1049aa225c5c7",
      "tree": "e4dae4fb06d63bf3008154303d32e70eb8c0a88c",
      "parents": [
        "e9dc9f247a668ece1b983cc964fec852c737bedd"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Fri May 15 10:17:09 2009 -0700"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Thu Jun 18 20:18:31 2009 +0100"
      },
      "message": "[BGP/cleanup] make community hash table static\n"
    },
    {
      "commit": "66e5cd87194ae6fdd51061a91b4698bc0a652f6b",
      "tree": "659d31f9a7dfb8d9ad9a51f37ff0853054a45399",
      "parents": [
        "cedd7f2fa6823bca9ddcfb062f97ed83b11a80dd"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Mon Feb 09 10:14:16 2009 -0800"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jun 12 17:09:03 2009 +0100"
      },
      "message": "[cleanup] functions taking no args should be declared with void args\n\nUse Ansi-C prototypes rather than old K\u0026R method of declaring\nfunction without arguments\n"
    },
    {
      "commit": "8178b2e156d2263015d7d981590a0899f2cb4c05",
      "tree": "3dcf31e5c9a3f094c0f2b24a9a3f552ca51d1d2c",
      "parents": [
        "5012bc3d217f4fff5759745ee689869fb5224b41"
      ],
      "author": {
        "name": "Andrew J. Schorr",
        "email": "schorr@ti82.(none)",
        "time": "Fri May 29 09:15:20 2009 -0400"
      },
      "committer": {
        "name": "Andrew J. Schorr",
        "email": "schorr@ti82.(none)",
        "time": "Fri May 29 09:15:20 2009 -0400"
      },
      "message": "[bgpd] 64-bit bugfix in community_del_val by Jeremy Jackson \u003cjerj@coplanar.net\u003e\n\n* bgpd/bgp_community.c: (community_del_val) Fix bug in memcpy that was\n  using the wrong size on architectures where a pointer is not 32 bits.\n"
    },
    {
      "commit": "aea339f72807c34a7916d8614e030069815e144c",
      "tree": "7b0ab93dcfec82736f05ac39106096360e4ceeb5",
      "parents": [
        "c540835eaf0cb59921969537d8e94cc83bb717f5"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Thu Apr 30 17:16:22 2009 +0400"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "pilot@etcnet.org",
        "time": "Thu Apr 30 17:16:22 2009 +0400"
      },
      "message": "[bgpd] AS4 bugfix by Chris Caputo \u003cccaputo@alt.net\u003e\n\n* bgpd/bgp_aspath.c: (aspath_make_str_count) \"assert (len \u003c str_size)\" was\n  getting hit under certain 4-byte ASN conditions. New realloc strategy.\n* bgpd/bgp_aspath.c: (aspath_key_make) const warning fix.\n\n\"%d\" -\u003e \"%u\" 4-byte ASN corrections.  Prevent negative number when ASN is\nabove 2^31.\n"
    },
    {
      "commit": "ffe11cfb0a808ae514193438616dfabc512b4cf6",
      "tree": "94452dba2c1a49d6e6a0782c6513acb36823cefc",
      "parents": [
        "9fd4958a4eef88c536e4a5aeefce302e10ee8ee6"
      ],
      "author": {
        "name": "Stephen Hemminger",
        "email": "stephen.hemminger@vyatta.com",
        "time": "Thu Aug 14 16:25:25 2008 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Aug 22 19:52:58 2008 +0100"
      },
      "message": "[lib] hash compare function arguments ought to be const qualified\n\n2008-08-14 Stephen Hemminger \u003cstephen.hemminger@vyatta.com\u003e\n\n\t* lib/hash.h: (struct hash) Hash comparator callback really\n\t  ought to treat storage behind arguments as constant - a compare\n\t  function with side-effects would be evil.\n\t* */*.c: Adjust comparator functions similarly, thus fixing at least\n\t  a few compiler warnings about const qualifier being dropped.\n\nSigned-off-by: Paul Jakma \u003cpaul@quagga.net\u003e\n"
    },
    {
      "commit": "851a1a5c146b346d8b8f58fe3924baa5c208f865",
      "tree": "38817ea92885b4274ca63ad2fc502da7a92c058d",
      "parents": [
        "0df7c91f048f2116610d6bdfce3ab6cad1981802"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 22 19:56:56 2008 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Tue Jul 22 19:56:56 2008 +0000"
      },
      "message": "[bgpd] fix a couple of trivial compiler warnings\n\n2008-07-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_community.c: (community_str2com) assigns defaults to local\n\t  vars\n\t* bgp_attr.c: (bgp_attr_parse) match format specifier to arg\n\t* bgp_table.{c,h}: (bgp_table_top) can take a * to a const, quelling\n\t  warning in bgp_route.c\n"
    },
    {
      "commit": "b2ceea18074ab8cca894051a3fbc30c312e3acc6",
      "tree": "3dfc9d1572582ed26cedad37768be9a57a67f5a8",
      "parents": [
        "882968e0a2fe65db5aff29149c87f6d292a1cd2d"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Sep 07 14:24:55 2007 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Fri Sep 07 14:24:55 2007 +0000"
      },
      "message": "[bgpd] low-impact DoS: crash on malformed community with debug set\n\n2007-09-07 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) bgpd can be made crash by remote peers if debug\n\t  bgp updates is set, due to NULL pointer dereference.\n\t  Reported by \"Mu Security Research Team\",\n\t  \u003csecurity@musecurity.com\u003e.\n\t* bgp_attr.c: (bgp_attr_community) If community length is 0,\n\t  don\u0027t set the community-present attribute bit, just return\n\t  early.\n\t* bgp_debug.c: (community_str,community_com2str) Check com\n\t  pointer before dereferencing.\n"
    },
    {
      "commit": "542bcb724c410283d7a3f317c8fe5e8a0b58f196",
      "tree": "cefe67e9b39990827c64fda884adeda208af9787",
      "parents": [
        "65ca75e0d1e7e440bf0d2a6a031d4148024c9d12"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 08 14:25:09 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Mon May 08 14:25:09 2006 +0000"
      },
      "message": "[bgpd] CID#62 fix double-free, use-after-free in community_str2com\n\n2006-05-08 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_community.c: (community_str2com) Coverity CID#62, fix\n\t  double-free, use-after-free.\n"
    },
    {
      "commit": "15aa6a1a732eef1049dbc64d7ede9236772cafcf",
      "tree": "0badfe99eedf29a4e8ef519123e91e96309ad300",
      "parents": [
        "cdc2c3f98e5652c06ad01eed6bfb5f93c168f817"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:39:35 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:39:35 2006 +0000"
      },
      "message": "[bgpd] Fix infinite loop in community_str2com\n\n2006-03-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* bgp_community.c: (community_gettoken) Unknown token should\n\t  return NULL, to give a strong indication to callers that\n\t  the token no longer can be parsed, otherwise callers looping\n\t  on this function may have a hard time ending their loop.\n\t  (community_str2com) While loop around community_gettoken appears\n\t  to have been coded thinking that break statement would break\n\t  from the while{}, hence it could never exit for unknown token\n\t  case. Fix it to do..while, so it can use the NULL result from\n\t  community_gettoken easily.\n"
    },
    {
      "commit": "e8e1946edf6ba87ef53832cdceccc39d7f0c3f26",
      "tree": "fcdaf92bf4129a8a58825bd21ae841a6b3b2bda8",
      "parents": [
        "779adb0147cfff1a831b08853976342ad2110fcd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:16:55 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Jan 19 20:16:55 2006 +0000"
      },
      "message": "[compiler] miscellaneous trivial compiler warning fixes\n\n2006-01-19 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n        * (general) various miscellaneous compiler warning fixes.\n          Remove redundant break statements from switch clauses\n          which return.\n          return from main, not exit, cause it annoys SOS.\n          Remove stray semi-colons which cause empty-statement\n          warnings.\n\t* zebra/main.c: (sighup) remove private declaration of external\n\t  function.\n"
    },
    {
      "commit": "94f2b3923e9663d0355a829f22e4e31cf68ee7b8",
      "tree": "59c0291a76b1c97fbb089abb479307f19cdfd4c1",
      "parents": [
        "7cad40007b9714dba65065916ea68577f9d3d6dd"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 12:44:16 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Tue Jun 28 12:44:16 2005 +0000"
      },
      "message": "2005-06-28 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (global) The great bgpd extern and static\u0027ification.\n\t* bgp_routemap.c: remove unused ROUTE_MATCH_ASPATH_OLD code\n\t  (route_set_metric_compile) fix u_int32_t to ULONG_MAX comparison\n\t  warnings.\n\t* bgp_route.h: (bgp_process, bgp_withdraw, bgp_update) export these\n\t  used by various files which had their own private declarations,\n\t  in the case of mplsvpn - incorrect.\n"
    },
    {
      "commit": "fd79ac918b8feaacebe9719adaac97dffb69137a",
      "tree": "d0665eb68e60da9d6e364414cdb61830f19f33d3",
      "parents": [
        "39db97e4e02eae08a1e18528367b6e9b07eb6a93"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 13 05:06:08 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Oct 13 05:06:08 2004 +0000"
      },
      "message": "2004-10-13 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* (global) more const\u0027ification and fixups of types to clean up code.\n\t* bgp_mplsvpn.{c,h}: (str2tag) fix abuse. Still not perfect,\n          should use something like the VTY_GET_INTEGER macro, but without\n          the vty_out bits..\n        * bgp_routemap.c: (set_aggregator_as) use VTY_GET_INTEGER_RANGE\n          (no_set_aggregator_as) ditto.\n        * bgpd.c: (peer_uptime) fix unlikely bug, where no buffer is\n          returned, add comments about troublesome return value.\n"
    },
    {
      "commit": "5228ad27e2f3abe0ebb69f66607aedc048b94a13",
      "tree": "a65817a03150dbfeb56a1eaceab526f31be1cc1d",
      "parents": [
        "c2bfbcc38428b53e856617e1da8bbe9f8d2ee2fa"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 04 17:58:18 2004 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Jun 04 17:58:18 2004 +0000"
      },
      "message": "2004-06-04 Paul Jakma \u003cpaul@dishone.st\u003e\n\n        * type mismatch fixes\n"
    },
    {
      "commit": "718e3744195351130f4ce7dbe0613f4b3e23df93",
      "tree": "bac2ad39971cd43f31241ef123bd4e470f695ac9",
      "parents": [],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Fri Dec 13 20:15:29 2002 +0000"
      },
      "message": "Initial revision\n"
    }
  ]
}
