<div dir="ltr">Hello, Is there a typo in function build_server_array()? (in file domain-match.c)<br><br>  for (serv = daemon->servers; serv; serv = serv->next, count++)<br>#ifdef HAVE_LOOP<br>    if (!(serv->flags & SERV_LOOP))<br>#endif<br>      {<br>       daemon->serverarray[count] = serv;<br> serv->serial = count;<br>      serv->last_server = -1;<br>      }<br>      <br>I think the variable count should not increase every time, it should increase when sever has no SERV_LOOP flag.(see below)<br><br>  for (serv = daemon->servers; serv; serv = serv->next)<br>#ifdef HAVE_LOOP<br>    if (!(serv->flags & SERV_LOOP))<br>#endif<br>      {<br>   daemon->serverarray[count] = serv;<br> serv->serial = count;<br>      serv->last_server = -1;<br>    count++;<br>      }<br><br>Considering that there is more than 10 servers which have SERV_LOOP, read memory of daemon->serverarray[count] could be out of array bound.<br><br>if (count > daemon->serverarrayhwm)<br>{<br>        struct server **new;<br>  count += 10; /* A few extra without re-allocating. */<br> if ((new = whine_malloc(count * sizeof(struct server *))))<br>    <br>      ...<br>}<br><br>Correct me if I'm wrong.<br><br>Regards,<br>Xingcong Li<br></div>