if (!PIM_OPTION_IS_SET(neigh->hello_options,
PIM_OPTION_MASK_LAN_PRUNE_DELAY)) {
/* update num. of neighbors without hello option lan_delay */
-
- --pim_ifp->pim_number_of_nonlandelay_neighbors;
+ pim_ifp->pim_number_of_nonlandelay_neighbors = MAX(
+ pim_ifp->pim_number_of_nonlandelay_neighbors - 1, 0);
}
if (!PIM_OPTION_IS_SET(neigh->hello_options,
PIM_OPTION_MASK_DR_PRIORITY)) {
/* update num. of neighbors without dr_pri */
-
- --pim_ifp->pim_dr_num_nondrpri_neighbors;
+ pim_ifp->pim_dr_num_nondrpri_neighbors =
+ MAX(pim_ifp->pim_dr_num_nondrpri_neighbors - 1, 0);
}
assert(neigh->propagation_delay_msec
struct pim_instance *pim = pim_ifp->pim;
#define PIM_MSG_REGISTER_BIT_RESERVED_LEN 4
+
+ if (tlv_buf_size
+ < (int)(PIM_MSG_REGISTER_BIT_RESERVED_LEN + sizeof(struct ip))) {
+ return 0;
+ }
ip_hdr = (struct ip *)(tlv_buf + PIM_MSG_REGISTER_BIT_RESERVED_LEN);
if (!pim_rp_check_is_my_ip_address(pim, dest_addr)) {