Fix for #28980, could enter infinite loop during node socket verification if dynamic sockets are present.

Note: in this particular bug report the sockets have some faulty flag settings (none of them should be flagged as SOCK_DYNAMIC), needs more info.
This commit is contained in:
Lukas Toenne
2011-10-20 10:36:02 +00:00
parent 36017e2af9
commit 70ba7d02db

View File

@@ -405,15 +405,15 @@ static bNodeSocket *verify_socket_template(bNodeTree *ntree, bNode *node, int in
static void verify_socket_template_list(bNodeTree *ntree, bNode *node, int in_out, ListBase *socklist, bNodeSocketTemplate *stemp_first) static void verify_socket_template_list(bNodeTree *ntree, bNode *node, int in_out, ListBase *socklist, bNodeSocketTemplate *stemp_first)
{ {
bNodeSocket *sock; bNodeSocket *sock, *nextsock;
bNodeSocketTemplate *stemp; bNodeSocketTemplate *stemp;
/* no inputs anymore? */ /* no inputs anymore? */
if(stemp_first==NULL) { if(stemp_first==NULL) {
while(socklist->first) { for (sock = (bNodeSocket*)socklist->first; sock; sock=nextsock) {
sock = (bNodeSocket*)socklist->first; nextsock = sock->next;
if (!(sock->flag & SOCK_DYNAMIC)) if (!(sock->flag & SOCK_DYNAMIC))
nodeRemoveSocket(ntree, node, socklist->first); nodeRemoveSocket(ntree, node, sock);
} }
} }
else { else {
@@ -424,10 +424,10 @@ static void verify_socket_template_list(bNodeTree *ntree, bNode *node, int in_ou
stemp++; stemp++;
} }
/* leftovers are removed */ /* leftovers are removed */
while(socklist->first) { for (sock = (bNodeSocket*)socklist->first; sock; sock=nextsock) {
sock = (bNodeSocket*)socklist->first; nextsock = sock->next;
if (!(sock->flag & SOCK_DYNAMIC)) if (!(sock->flag & SOCK_DYNAMIC))
nodeRemoveSocket(ntree, node, socklist->first); nodeRemoveSocket(ntree, node, sock);
} }
/* and we put back the verified sockets */ /* and we put back the verified sockets */