+2006-03-30 Paul Jakma <paul.jakma@sun.com>
+
+ * bgp_community.c: (community_gettoken) Unknown token should
+ return NULL, to give a strong indication to callers that
+ the token no longer can be parsed, otherwise callers looping
+ on this function may have a hard time ending their loop.
+ (community_str2com) While loop around community_gettoken appears
+ to have been coded thinking that break statement would break
+ from the while{}, hence it could never exit for unknown token
+ case. Fix it to do..while, so it can use the NULL result from
+ community_gettoken easily.
+
2006-03-22 Paul Jakma <paul.jakma@sun.com>
* bgpd.c: (peer_free) release the per-peer workqueue when
/* Unknown string. */
*token = community_token_unknown;
- return p;
+ return NULL;
}
/* Community value. */
if (separator)
{
*token = community_token_unknown;
- return p;
+ return NULL;
}
else
{
if (! digit)
{
*token = community_token_unknown;
- return p;
+ return NULL;
}
*val = community_high + community_low;
*token = community_token_val;
return p;
}
*token = community_token_unknown;
- return p;
+ return NULL;
}
/* convert string to community structure */
u_int32_t val;
enum community_token token;
- while ((str = community_gettoken (str, &token, &val)))
+ do
{
+ str = community_gettoken (str, &token, &val);
+
switch (token)
{
case community_token_val:
community_free (com);
break;
}
- }
+ } while (str);
if (! com)
return NULL;