On Fri, Jun 09, 2017 at 04:23:13PM +0200, Martin Pieuchot wrote:
> I couldn't convince myself that rn_search() do not check bits
> after 'mlen' so I added the memset() as you suggested.
It looks like you forgot to put the memset() in the diff.
> @@ -432,14 +440,10 @@ rn_addmask(void *n_arg, int search, int
> cp--;
> mlen = cp - addmask_key;
> if (mlen <= skip) {
> - if (m0 >= last_zeroed)
> - last_zeroed = mlen;
> return (mask_rnhead->rnh_nodes);
> }
> - if (m0 < last_zeroed)
> - memset(addmask_key + m0, 0, last_zeroed - m0);
> - *addmask_key = last_zeroed = mlen;
> - tm = rn_search(addmask_key, rn_masktop);
> + SALEN(addmask_key) = mlen;
> + tm = rn_search(addmask_key, mask_rnhead->rnh_treetop);
> if (memcmp(addmask_key, tm->rn_key, mlen) != 0)
> tm = NULL;
> if (tm || search)
With memset() added, OK bluhm@