[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41145] trunk/blender/source/blender/nodes /intern/node_socket.c: Fix for #28980, could enter infinite loop during node socket verification if dynamic sockets are present .

Lukas Toenne lukas.toenne at googlemail.com
Thu Oct 20 12:36:02 CEST 2011


Revision: 41145
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41145
Author:   lukastoenne
Date:     2011-10-20 10:36:02 +0000 (Thu, 20 Oct 2011)
Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/source/blender/nodes/intern/node_socket.c

Modified: trunk/blender/source/blender/nodes/intern/node_socket.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/node_socket.c	2011-10-20 10:35:54 UTC (rev 41144)
+++ trunk/blender/source/blender/nodes/intern/node_socket.c	2011-10-20 10:36:02 UTC (rev 41145)
@@ -405,15 +405,15 @@
 
 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;
 	
 	/* no inputs anymore? */
 	if(stemp_first==NULL) {
-		while(socklist->first) {
-			sock = (bNodeSocket*)socklist->first;
+		for (sock = (bNodeSocket*)socklist->first; sock; sock=nextsock) {
+			nextsock = sock->next;
 			if (!(sock->flag & SOCK_DYNAMIC))
-				nodeRemoveSocket(ntree, node, socklist->first);
+				nodeRemoveSocket(ntree, node, sock);
 		}
 	}
 	else {
@@ -424,10 +424,10 @@
 			stemp++;
 		}
 		/* leftovers are removed */
-		while(socklist->first) {
-			sock = (bNodeSocket*)socklist->first;
+		for (sock = (bNodeSocket*)socklist->first; sock; sock=nextsock) {
+			nextsock = sock->next;
 			if (!(sock->flag & SOCK_DYNAMIC))
-				nodeRemoveSocket(ntree, node, socklist->first);
+				nodeRemoveSocket(ntree, node, sock);
 		}
 		
 		/* and we put back the verified sockets */




More information about the Bf-blender-cvs mailing list