diff --git a/CHANGES b/CHANGES index a836a2e..7cfe37d 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ untagged yet (2018-08-10) Reported by Pier Carlo Chiodi. - initial support for Huawei format (prefix-lists and as-path filters) New flag -U. Requested by Alexander Wagberg. + - fix ipv6 prefix-ranges. Reported by Jay Ford. 0.1.35-rc2 (2017-06-14) - OpenBSD need . Reported by Denis Fondras. diff --git a/bgpq_expander.c b/bgpq_expander.c index 5f584df..cde6f08 100644 --- a/bgpq_expander.c +++ b/bgpq_expander.c @@ -305,7 +305,11 @@ int bgpq_expanded_v6prefix(char* prefix, struct bgpq_expander* ex, struct bgpq_request* req) { - bgpq_expander_add_prefix(ex,prefix); + char* d = strchr(prefix, '^'); + if (!d) + bgpq_expander_add_prefix(ex,prefix); + else + bgpq_expander_add_prefix_range(ex,prefix); return 1; }; diff --git a/sx_prefix.c b/sx_prefix.c index 50804eb..6292a78 100644 --- a/sx_prefix.c +++ b/sx_prefix.c @@ -242,10 +242,19 @@ sx_prefix_range_parse(struct sx_radix_tree* tree, int af, int maxlen, text, min, p.masklen); return 0; }; - SX_DEBUG(debug_expander, "parsed prefix-range %s as %lu-%lu\n", - text, min, max); + if (af == AF_INET && max > 32) { + sx_report(SX_ERROR, "Invalid prefix-range %s: max %lu > 32\n", + text, max); + return 0; + } else if (af == AF_INET6 && max > 128) { + sx_report(SX_ERROR, "Invalid ipv6 prefix-range %s: max %lu > 128\n", + text, max); + return 0; + }; if (max > maxlen) max = maxlen; + SX_DEBUG(debug_expander, "parsed prefix-range %s as %lu-%lu (maxlen: %u)\n", + text, min, max, maxlen); sx_radix_tree_insert_specifics(tree, p, min, max); return 1; };